在Table-Per-Type继承模式中,实体框架使用&#34; CASE WHEN ..那么&#34; 当我有大量类型时,sql查询变得非常庞大和复杂。 因此,当我在层次结构中有超过30种类型(简单,有一个键和一个文本字段)时,可以长到几百千字节,而且大多数部分是&#34; CASE WHEN ...&#34; < / p>
所以,我的问题是有没有办法指示EF不加载所有继承类型的所有字段。 例如,如果我有
public class A {
[Key]
public int Id {get;set;}
}
public class B : A {
public virtual string FieldB {get;set;}
}
public class C : A {
public virtual string FieldC {get;set;}
}
执行查询时
context.Set<A>().ToArray()
它不仅得到A.Id,还有B.FieldB和C.FieldC
如果我使用context.Set(),这可能非常重要。单个(a =&gt; a.Id == itemId)与A查询的许多继承者变得非常重要;
有没有办法使用DynamicProxy,只获取A.Id,并通过代理以懒惰的方式获取其他字段?
更新
我们使用的深度继承实体的真实示例是文档:
例如,有基类IncomingDocument,具有Id,Date,Number。
然后,取决于部门,它可以是BankingIncomingDocument(例如AccountNumber),DepositaryIncomingDocument(带有FinancialTool)等(最多5-6个部门)。
然后,对于每个部门可以是特定文件,TransferFundsBankIncomingDocument,CloseAccoundBankIncomingDocument等。