2012-07-29 231 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