我有一個關係存儲在單獨的連接表中的我的表之一定義了層次關係。連接表還包含有關關係類型的信息。 (簡化)模式如下所示:在實體框架中定義分層數據的關係代碼優先
Bills
ID int IDENTITY(1,1) NOT NULL (PK)
Code varchar(5) NOT NULL
Number varchar(5) NOT NULL
...
BillRelations
ID int IDENTITY(1,1) NOT NULL (PK)
BillID int NOT NULL
RelatedBillID int NOT NULL
Relationship int NOT NULL
...
我在Bills表中將BillID和RelatedBillID上的FK關係定義爲ID。
我試圖在實體框架代碼優先映射這一點,並沒有取得成功。我的課程如下所示。忽略RelationshipWrapper
的東西,這是一個圍繞enum
的名爲Relationship
的包裝類,它對應於Relationship列中的值。
public class Bill
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
[StringLength(5)]
public string Code { get; set; }
[Required]
[StringLength(5)]
public string Number { get; set; }
public virtual ICollection<BillRelation> RelatedBills { get; set; }
...
}
public class BillRelation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public long BillID { get; set; }
[ForeignKey("BillID")]
public virtual Bill Bill { get; set; }
public long RelatedBillID { get; set; }
[ForeignKey("RelatedBillID")]
public virtual Bill RelatedBill { get; set; }
public RelationshipWrapper Relationship { get; set; }
...
}
我在各種各樣的化身只有試過,通過模型構建器上的DbContext和使用都明確定義的關係數據的註釋,但是上面的定義是什麼我要找的。我正在使用集合,因爲外鍵屬性不是主鍵。
使用此設置我得到一個錯誤:Bill_ID column is not defined
(或類似的東西)。
如果我使用以下代碼獲取了模型構建器路線,則會出現「表格BillRelations在數據庫中不存在」的錯誤。
modelBuilder.Entity<Bill>().HasMany(b => b.RelatedBills)
.WithRequired(r => r.Bill)
.Map(m => m.MapKey("BillID").ToTable("BillRelations"));
modelBuilder.Entity<BillRelation>().HasRequired(r => r.RelatedBill)
.WithRequiredDependent()
.Map(m => m.MapKey("RemoteBillID").ToTable("BillRelations"));
我已經能夠使其通過定義只有關係的一個半上班,票據 - > BillRelations,然後用我的存儲庫中的加入填補上BillRelations類的[NotMapped]
RelatedBill財產爲每條例草案的相關條例草案收集中的相關條例草案。如果我能幫上忙,我寧願不這樣做。
我想過的唯一的其他解決方案是在一個單獨的表格(有4種類型)中對每個關係進行建模,並使用標準Bill < - >通過每種關係類型的連接表進行Bill映射 - - 如果我能避免,我寧願不這樣做。
任何人都可以看到我在做什麼錯誤或告訴我,如果我想要做什麼甚至可能在EF代碼優先4.1?