[英]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_3
在Table_1
和Table_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.