在 Table-Per-Type 继承模式中,Entity Framework 使用“CASE WHEN .. THEN”当我有大量类型时,sql 查询变得非常庞大和复杂。所以,当我有超过 30 种类型(简单,一个键和一个文本字段)时,层次结构可以增长到数百千字节,其中大部分是“CASE WHEN ...”
所以,我的问题是有什么方法可以指示 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().Single(a=>a.Id == itemId) 与 A 查询的许多继承者一起使用,这可能非常重要;
有没有办法使用DynamicProxy,只获取A.Id,并通过代理以惰性方式获取其他字段?
更新:
我们使用的深度继承实体的真实示例是文档:
例如,有基类 IncomingDocument,带有 Id、Date、Number。
然后,取决于部门,它可能是 BankingIncomingDocument(例如带有 AccountNumber)、DepositoryIncomingDocument(带有 FinancialTool)等(最多 5-6 个部门)。
然后,每个部门可以是特定的文档,TransferFundsBankIncomingDocument、CloseAccoundBankIncomingDocument 等。