簡體   English   中英

映射異常表關系

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

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