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