繁体   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