簡體   English   中英

如何在Entity Framework中使用具有相同外鍵的多個表

[英]How to use multiple tables with the same foreign key with Entity Framework

我需要定義我的3個類,如下所示:

public class Table1
{
   public Guid Table1CoreId {get;set;}
   public string Name {get;set;}

   public Table2 Table2 {get;set;}
   public Table3 Table3 {get;set;}
}

public class Table2
{
   Guid Table1CoreId {get;set;}
}

public class Table3
{
   Guid Table1CoreId {get;set;}
}

如您所見,我將Table2和Table3定義為Table1中的屬性。

我嘗試使用EF fluent API定義應如何創建它們,但沒有得到想要的結果。 我需要將我的表定義如下:

表格1:

  • 表1CoreId(PK)
  • 名稱

表2:

  • Table1CoreId(PK,FK)
  • ID(PK)

表3:

  • Table1CoreId(PK,FK)
  • ID(PK)

表2與表1具有1對1的關系,而表3與表1具有1對M的關系。 表2和表3中的兩個條目都是可選的。

我嘗試了以下操作:在我使用的Table2和3定義類中,我使用了以下內容:

this.HasRequired(t => t.Table1)
    .WithMany()
    .HasForeignKey(t => t.Table1CoreId)
    .WillCascadeOnDelete(false);

但是,當我創建遷移並更新數據庫時,它將在表1中創建其他列:

Table2_Table1CoreId
Table2_Id
Table3_Table1CoreId
Table3_Id

據我所知,所有主鍵和外鍵都是在各個表中創建的,但我只是不希望在Table1中創建這些其他列。

我希望這是有道理的,並且有人可以為我指出正確的解決方法。

在與我的同事進一步討論了這個問題之后,我們最終進一步標准化了我們的表,因此我們引入了一個額外的表,並且還刪除了使其中一個表具有1-to-m關系的要求,因此所有表現在都是一對一 所有這些更改使定義我們的類變得容易得多,也使解決我們的EF問題變得容易得多。

最終更改如下:

public class Table1
{
    public Guid Table1CoreId {get;set;}
    public string Name {get;set;}
}

public class Table2
{
   Guid Table1CoreId {get;set;}
   int  Table2CoreId {get;set;}
}

public class Table3
{
   Guid Table2CoreId {get;set;}
}

public class Table4
{
   Guid Table2CoreId {get;set;}
}

在Table2配置類中,我添加了以下內容:

public class Table2Configuration : EntityTypeConfiguration<Table2>
{
    ...
    this.HasOptional(t => t.Table3)
        .WithRequired(o => o.Table2)
        .WillCascadeOnDelete(true);

    this.HasOptional(t => t.Table4)
        .WithRequired(o => o.Table2)
        .WillCascadeOnDelete(true);
}

現在我們的表如下所示:

表格1:

  • 表1CoreId(PK)
  • 名稱

表2:

  • Table1CoreId(PK,FK)
  • Table2CoreId

表3:

  • Table2CoreId(PK,FK)
  • ID(PK)

表4:

  • Table2CoreId(PK,FK)
  • ID(PK)

並且按照最初的要求,表1中沒有添加其他字段。

注意:基於最初的問題,我確實通過將[ForeignKey(“ Table1CoreId,Id”)]屬性添加到Table1中定義的兩個導航屬性(即Table2和Table3)中,設法解決了其他字段問題,但從未解決過在最終重新設計類和表時使用EF Fluent API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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