1

在 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 等。

4

0 回答 0