我有两个班级:
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。
答案 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。