Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架6基类中的继承和多对多关系_C#_Entity Framework_Inheritance_Many To Many_Table Per Type - Fatal编程技术网

C# 实体框架6基类中的继承和多对多关系

C# 实体框架6基类中的继承和多对多关系,c#,entity-framework,inheritance,many-to-many,table-per-type,C#,Entity Framework,Inheritance,Many To Many,Table Per Type,我是EF的新手,无法找到解决问题的方法。我首先使用代码并实现了一些类(大约15个),这些类继承自基类: Class Base { … } Class A : Base { … } Class B : Base { .. } Class Base { Public ICollection<Base> associations {get; set;} } 该模型实现为TPT。所以有一个表“Base”,每个派生类都有一个表,比如表“a”和表“B”。派生

我是EF的新手,无法找到解决问题的方法。我首先使用代码并实现了一些类(大约15个),这些类继承自基类:

Class Base {
    …
}
Class A : Base {
    …
}
Class B : Base {
    .. 
}
Class Base {
    Public ICollection<Base> associations {get; set;}
}
该模型实现为TPT。所以有一个表“Base”,每个派生类都有一个表,比如表“a”和表“B”。派生类只包含不在基类中的字段。。。现在,我想以多对多的形式将每个类相互链接。因此,类A或B中的对象可以与类A或B中的任何对象有许多关联。这在以下实现中非常有效:

Class Base {
    Public ICollection<Base> con1 {get; set;}
    Public ICollection<Base> con2 {get; set;}
}
类基{
公共ICollection con1{get;set;}
公共ICollection con2{get;set;}
}

我现在的问题是查询中的巨大开销。每个类都有许多字段,因此包含con1和con2的查询将连接每个派生类(并包含每个类的每个字段)。但我只需要ID(键)和派生类的类型。有没有解决这个问题的最佳方法

另一个问题是,如果基类中可能只有一个关联属性:

Class Base {
    …
}
Class A : Base {
    …
}
Class B : Base {
    .. 
}
Class Base {
    Public ICollection<Base> associations {get; set;}
}
类基{
公共ICollection关联{get;set;}
}
此关联应包含两个方向上的所有关联。因为我的意图不是像“B类包含产品”和“B类属于产品”这样的层级关系——它只是与对象之间的关联,没有重大意义或方向,比如“B类也与a类一起出售,并且……”

谢谢


Jacek

“每个类都有许多字段,因此包含con1和con2的查询将连接每个派生类(并包含每个类的每个字段)。但我只需要ID(键)和派生类的类型”-请显示您的查询我的查询是通过EF自动生成的,如下所示:Var productsb=ProductB in _context.productsb.Include(“con1”).Include“con2”每个类都有许多字段,因此包含con1和con2的查询将连接每个派生类(并包含每个类的每个字段)。但我只需要ID(键)派生类的类型“-请告诉我们您的查询我的查询是通过EF自动生成的,如下所示:Var productsb=ProductB in _context.productsb.Include(“con1”).Include“con2”)