0

我有两节课:

public class Fighter
{
    public int FighterID { get; set; }
    public int DivsionID { get; set; }
    public string Name { get; set; }
    //...
    public virtual Division Division { get; set; }
}

public class Division
{
    public int DivisionID { get; set; }
    public string Name { get; set; }
    public int? FromWeight { get; set; }
    public int? ToWeight { get; set; }
    public ICollection<Fighter> Fighters { get; set; }
}

为什么我的 Fighters 表上有 Division_DivisionID?我认为DevisionID应该是FK。 在此处输入图像描述

4

2 回答 2

2

我写了一篇关于它是如何工作的文章,看看http://blog.staticvoid.co.nz/2012/07/entity-framework-navigation-property.html - 查看实体框架如何检测导航属性

简而言之,这是由于约定 FK 被命名

<LocalPropertyName>_<ForeignIdPropertyName>

另请参阅实体框架导航属性生成规则

要将 EF 命名为 FK DivisionID,请将以下内容添加到您的模型构建器中

        modelBuilder.Entity<Fighter>()
            .HasRequired(f => f.Division)
            .WithMany(d => d.Fighters)
            .HasForeignKey(f => f.DivisionID);
于 2012-07-30T00:11:49.630 回答
2

您将 EF FK 关联概念与您的数据库 FK 概念混合在一起,它们并不相同。引入了 EF 上的 FK 关联概念,因此您可以更轻松地执行查找和数据绑定等操作(例如 DropDownList 数据绑定)。

在您的表中创建的 ER FK 概念是您在 Fighter 类上的组合的映射,在本例中是 Division 属性。该表列的命名遵循 EF 的规则。

有关 EF FK 协会的更多信息,请阅读本文

于 2012-07-30T16:36:55.863 回答