2012-07-29 151 views
0

我有两个类:实体框架代码首先FK场

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; } 
} 

为什么我有Division_DivisionID我的战士表?我认为DevisionID应该是FK。 enter image description here

回答

2

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

总之这是由于公约,说FKS被命名为

<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

还有更多 - 他在属性名称中有一个拼写错误('DivsionID'而不是'DivisionID') – 2012-07-30 13:07:22

+0

@DiegoMijelshon你的绝对权利他也有一个拼写错误,很好抓:) – 2012-07-30 20:04:58

2

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

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

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