簡體   English   中英

創建具有兩個子表的主表,這些子表將EF 4.1一對一或零鏈接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM