实体框架代码首先是FK字段

时间:2012-07-29 23:54:30

标签: entity-framework ef-code-first

我有两个班级:

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。 enter image description here

2 个答案:

答案 0 :(得分:2)

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

简而言之,这是因为一项惯例称FK被命名为

<LocalPropertyName>_<ForeignIdPropertyName>

另见Entity Framework Navigation Property generation rules

使EF命名为FK DivisionID,将以下内容添加到模型构建器

        modelBuilder.Entity<Fighter>()
            .HasRequired(f => f.Division)
            .WithMany(d => d.Fighters)
            .HasForeignKey(f => f.DivisionID);

答案 1 :(得分:2)

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

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

有关EF FK协会的更多信息,请阅读this article