簡體   English   中英

EF Core 中使用 TPC inheritance 的多對多

[英]Many-to-many with TPC inheritance in EF Core

我在使用 TPC inheritance 配置 May-to-many 時遇到問題

public class TestB
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<ParentClass> ParentClasss { get; set; }
}

public abstract class ParentClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<TestB> TestBs { get; set; }
}

[Table("Child_A")]
public class Child_A: ParentClass
{
    public string childAName { get; set; }
}

[Table("Child_B")]
public class Child_B: ParentClass
{   
    public string childbName { get; set; }
}

多對多關系在抽象 class 上,生成的表是

測試B

父類

ParentClassTestB:多對多關系

Child_A:對 ParentClass 有 FK

Child_B:對 ParentClass 有 FK

我需要的是直接與 Child_A 和 Child_B 建立多對多關系。

所以生成的表會是這樣的

測試B

孩子A

Child_ATestB:Child_A 和 TestB 之間的多對多關系表

孩子_B

Child_BTestB:Child_B和TestB的多對多關系表

問候

我需要的是直接與 Child_A 和 Child_B 建立多對多關系。

然后不要將 map ParentClass 作為實體。 您仍然可以在代碼中將其作為父級 class,但就數據庫而言,Clild_A 和 Child_B 是不相關的。

這在 TPH 中尤為重要,它具有嚴重的性能影響。 這樣,您的 inheritance 層次結構就沒有數據庫開銷。 唯一真正的缺點是您沒有對所有 ParentClass 實體的內置搜索。

唯一的變化是,如果你不想讓ParentClass參與數據庫中的M2M,你就不能有從TestB到ParentClass的導航屬性。 所以

public class TestB
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Child_A> ParentClasssA { get; set; }
    public ICollection<Child_B> ParentClasssB { get; set; }
}

public abstract class ParentClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<TestB> TestBs { get; set; }
}

[Table("Child_A")]
public class Child_A : ParentClass
{
    public string childAName { get; set; }
}

[Table("Child_B")]
public class Child_B : ParentClass
{
    public string childbName { get; set; }
}

暫無
暫無

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

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