EF中的每個實體都必須有一個主鍵。它看起來像A是多對多的聯結表,所以你有多種選擇。
刪除完全以讓EF處理許多一對多:
public class B
{
public int Id { get; set; }
public virtual ICollection<C> Cs { get; set; }
}
public class C
{
public int Id { get; set; }
public virtual ICollection<B> Bs { get; set; }
}
如果你想爲實體,你必須定義附加鍵:
public class A
{
public int Id { get; set; }
public B B { get; set; }
public C C { get; set; }
}
,或者您必須包括FK屬性對於B和C並將它們都標記爲複合主鍵(也應該在db中):
public class A
{
public int bId { get; set; }
public int cId { get; set; }
public B B { get; set; }
public C C { get; set; }
}
E DIT:
映射最後的解決方案
modelBuilder.Entity<A>.HasKey(a => new { a.bId, a.cId });
modelBuilder.Entity<A>.HasRequired(a => a.B)
.WithMany()
.HasForeignKey(a => a.bId);
modelBuilder.Entity<A>.HasRequired(a => a.C)
.WithMany()
.HasForeignKey(a => a.cId);
無論如何,如果你一個看起來完全一樣,你沒有你肯定做錯了任何其他屬性描述。僅當映射A包含其他任何內容時才需要映射A,然後導航屬性/ FK用於建模多對多關係。
感謝您的快速回答。但是,如果我添加一個額外的鍵或新的屬性,那麼當我試圖獲取數據時,我會得到一個錯誤,例如使用toList()。我如何將它們標記爲「複合主鍵」以排除它們? – r3d
這不僅僅是添加屬性 - 這些屬性必須映射到數據庫列(=它們也必須存在於數據庫中) - 它們不能被排除。您使用的是什麼版本的EF,以及您使用的是哪種類型的映射? –
EF版本是4.0.30319。我使用「WithMany()。Map(x => x.MapKey(」Id「));」其中Id是B的fk,對於c的id是相同的。如果我添加兩個新的ID,我不能將它們映射到相同的ID。 – r3d