簡體   English   中英

實體框架6首先將多個表與一個外鍵關系代碼

[英]Entity Framework 6 multiple table to one foreign key relationship code first

我想知道是否有人可以建議我如何在EF6中首先使用代碼完成以下操作

在此輸入圖像描述

如果我將Table_3作為List添加到我的實體中的Table_1和Table_2。 EF會自動為Table_3中的兩個表生成外鍵列,而不是識別它們屬於同一類型。

我的模型類設置如下。

public interface IParent
{
    int ID { get; set; }
    List<Table_3> Children { get; set; }
}

public class Table_1 : IParent
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual List<Table_3> Children { get; set; }
}

public class Table_2 : IParent
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual List<Table_3> Children { get; set; }
}

public class Table_3
{
    [Key]
    public int ID { get; set; }
    public int ParentID { get; set; }
    [ForeignKey("ParentID")]
    public virtual IParent Parent { get; set; }
}

EF代碼首先生成以下內容

在此輸入圖像描述

編輯

只是為了讓任何有同樣問題的人知道

我現在通過將IParent接口更改為抽象類來解決這個問題,我的類現在看起來如下所示

[Table("ParentBase")]
public abstract class ParentBase
{
    [Key]
    public int ID { get; set; }
    public List<Table_3> Children { get; set; }
}
[Table("Table_1")]
public class Table_1 : ParentBase
{
    public string Name { get; set; }
}
[Table("Table_2")]
public class Table_2 : ParentBase
{
    public string Name { get; set; }
}
[Table("Table_3")]
public class Table_3
{
    [Key]
    public int ID { get; set; }
    public int ParentID { get; set; }
    [ForeignKey("ParentID")]
    public virtual ParentBase Parent { get; set; }
}

與表安排

在此輸入圖像描述

如果能夠滿足原件的要求會更好。

您還可以執行以下操作,其中分別使用Table_3Table_1Table_2之間Table_1 1對多的關系:

modelBuilder.Entity<Table_3>().HasOptional(/*Nav Prop*/).WithMany(m => m.Table_3s).HasForeignKey(f => f.ParentId).WillCascadeOnDelete(false);
modelBuilder.Entity<Table_3>().HasOptional(/*Nav Prop*/).WithMany(m => m.Table_3s).HasForeignKey(f => f.ParentId).WillCascadeOnDelete(false);

如果需要進一步澄清,請與我們聯系。

我也有這個問題,我從一開始就使用抽象類而不是接口。 我的問題是我的table_3有兩個導航屬性:一個是公共虛擬Table_1,另一個是公共虛擬Table_2,然后EF剛剛配置了這些額外的外鍵列,我將兩個導航屬性合並為一個public virtual parentbase {get;set;}. 然后它奏效了。 希望這可以幫助。

側注,建議在公共列表子項上添加虛擬關鍵字{get; 組; 在parentbase類中,因為在前面的示例中,它已經是這樣了。

感謝發布這個,我也遇到了這個問題。

暫無
暫無

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

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