![](/img/trans.png)
[英]What is the advantage of mapping relationships in Entity Framework without mapping in the table
[英]Mapping unusual table relationships
我想知道是否有人可以建議我如何解決使用FluentAPI映射幾個表的問題。
我有一個父表,其鍵名為ID,然后是一個子表,具有兩個字段idA和idB。
父表中的主鍵鏈接到idA或idB,而不是兩者。
public Parent()
{
this.ChildA = new HashSet<Child>();
this.ChildA = new HashSet<Child>();
}
public virtual ICollection<Child> ChildA { get; set; }
public virtual ICollection<Child> ChildB{ get; set; }
}
public Child()
public virtual Parent parent { get; set; }
}
對於關系/表設計,我可以做很多事情,因為它是遺留的,無法更改。 只需了解用於解決此問題的正確FluentAPI。 在上面的例子中,我想像的東西以及諸如此類的東西都將是必需的。
modelBuilder.Entity<Child>().HasRequired<Parent>(p => p.parent).WithMany(q => q.childs).HasForeignKey(r => r.idA);
modelBuilder.Entity<Child>().HasRequired<Parent>(p => p.parent).WithMany(q => q.childs).HasForeignKey(r => r.idB);
我相信我能夠獲得您要查找的正確映射。 我在POCO中添加了導航屬性,該屬性使Entity Framework知道如何在代碼中使用外鍵。
public class Child
{
public int Id { get; set; }
public virtual Parent ParentA { get; set; }
public virtual Parent ParentB { get; set; }
public Child() { }
}
為了將這些導航屬性映射到您已經存在的外鍵列,我使用了FluentAPI Map
方法。
modelBuilder.Entity<Child>().HasRequired<Parent>(p => p.ParentA).WithMany(q => q.ChildA).Map(m => m.MapKey("idA")).WillCascadeOnDelete(false);
modelBuilder.Entity<Child>().HasRequired<Parent>(p => p.ParentB).WithMany(q => q.ChildB).Map(m => m.MapKey("idB")).WillCascadeOnDelete(false);
這樣,我已指示ParentA
填充了ChildA
集合,而ParentB
填充了ChildB
集合。 Map
方法使我可以映射到您已經存在的FK,而不必將POCO作為屬性包括在內。
請注意,每個映射到表的POCO必須具有主鍵。 您現有的子表是否有PK? 如果沒有,您可能會遇到其他麻煩。 我建議閱讀這篇SO文章。 實體框架:不帶主鍵的表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.