[英]Creating a master table with two child tables linking one-to-zero-or-one with EF 4.1
使用MVC EF4.1,我試圖將表(TableMaster)鏈接到TableChildOne(一對一或零的關系),也鏈接到TableChildTwo(也一對一或零)。 TableChildOne和TableChildTwo不直接鏈接。
TablechildOne和TableChildTwo需要共享TableMaster的主鍵(我讀到這是不可能的,有任何解決方法嗎?)
我包括一個圖像,以使其更加清楚,不確定是否應該在某處添加外鍵,這不是由代碼創建的實際模型,而是我想要的。 不知道某個地方是否應該有外鍵?
圖片: http : //www.davidsmit.za.net/img/untitled.png
我的下面的代碼可以編譯,但是當嘗試添加控制器時,出現錯誤:
“已經添加了具有相同鍵的項目”
public class TableMaster
{
public int TableMasterID { get; set; }
public DateTime ReportDate { get; set; }
public virtual TableChildOne TableChildOne { get; set; }
public virtual TableChildTwo TableChildTwo { get; set; }
}
public class TableChildOne
{
[Key]
public int TableMasterID { get; set; }
public String Description_1 { get; set; }
public virtual TableMaster TableMaster { get; set; }
}
public class TableChildTwo
{
[Key]
public int TableMasterID { get; set; }
public String Description_2 { get; set; }
public virtual TableMaster TableMaster { get; set; }
}
public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TableMaster>()
.HasOptional(p => p.TableChildOne).WithRequired(p => p.TableMaster);
modelBuilder.Entity<TableMaster>()
.HasOptional(p => p.TableChildTwo).WithRequired(p => p.TableMaster);
}
當我完全刪除第二張桌子時,它工作正常。
我以下面的鏈接為例(表OfficeAssignment和Student),它顯示了如何將表一對一或零鏈接。 但是我很難添加具有相同鏈接的另一個表: http : //www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model- asp-net-mvc應用程序
任何幫助將不勝感激。
謝謝appelmeester
您能否提供更多有關為什么要這樣做的背景知識? 如果要在三個表之間共享主鍵,則將對數據進行分區。 您要解決什么開發方案。 聽起來您可能想要映射對象繼承,對嗎?
如果您確實只有幾個描述,那么實際上這只是一張表。
編輯:
涼。 由於此請求的業務環境有點含糊,對不起,我還是不太明白。 如果您有一個TableMaster,然后有一些子表,那么這聽起來像一個繼承樹。 因此,使用EF,您可以選擇許多不同的策略來對此建模(TPH,TPT等)。 為此,我建議您考慮使用TPT,因為這可能使您可以了解清理數據的方式。 另外,您將獲得的好處是,默認情況下將創建表,就像您指定的一樣。 檢查這個出來以供參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.