首页 > 解决方案 > EFCore 在一对一关系上生成的列名无效

问题描述

我正在尝试在我的上下文类中设置一对一的外键关系,但我不断收到以下错误。我发现了一个类似的帖子,但这似乎并没有解决我的问题,因为我在模型中明确指定了关系。我确认:

我试图通过ForeignKey("ServerId")在 ServerList.ServerName 列中添加注释来解决这个问题,但这没有用。为什么 EFCore 尝试创建此列?为什么 ForeignKey 注释没有解决问题?

列名“ServerListServerName”无效。

我的上下文类:

   modelBuilder.Entity<Server>(entity =>
    {   
        entity.HasOne(d => d.ServerList)
            .WithOne(p => p.AwsServer)
            .HasForeignKey<Server>(d => d.ServerName);
    });

服务器.cs:

public partial class Server
{
    [Key]
    public int ServerId { get; set; }
    public string ServerName { get; set; }

    public virtual ICollection<PockAdvCompany> Companies { get; set; }
    public virtual ParentServer ParentServer { get; set; }
    public virtual ServerList ServerList { get; set; }
}

服务器列表.cs:

public partial class ServerList
{
    public virtual ICollection<PockAdvCompany> Companies { get; set; }
    public virtual Server AwsServer { get; set; }

    [Key,Column("ServerId")]
    public string ServerName { get; set; }
}

标签: c#entity-framework-coreone-to-oneef-core-3.0

解决方案


这是因为 yourForeignKey("ServerId")不是 in 的属性,ServerList而是 in 的属性Server 它应该是将该类指向其父级的属性的名称。FK inServerList也是string,但 PK 是int 试试这个

public partial class ServerList
{
    public virtual ICollection<PockAdvCompany> Companies { get; set; }
    public virtual Server AwsServer { get; set; }

    [ForeignKey("AwsServer")]
    public int ServerId { get; set; }
}

希望这有帮助


推荐阅读