EF表每类型性能

时间:2013-11-07 08:37:08

标签: c# performance entity-framework inheritance table-per-type

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

0 个答案:

没有答案