Table-Per-Type 継承スキーマでは、Entity Framework は "CASE WHEN .. THEN" を使用します。かなりの数の型がある場合、SQL クエリは非常に大きく複雑になります。したがって、階層内に 30 を超える型 (1 つのキーと 1 つのテキスト フィールドを持つ単純なもの) がある場合、数百キロバイトまで成長する可能性があり、そのほとんどは "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) を多くの継承者と共に使用する場合、非常に重要になる可能性があります。
DynamicProxy を使用して A.Id のみを取得し、プロキシによって他のフィールドを遅延して取得する方法はありますか?
アップデート:
私たちが使用する深く継承されたエンティティの実際の例はドキュメントです:
たとえば、Id、Date、Number を持つ基本クラス IncomingDocument があります。
次に、部門によって異なりますが、BankingIncomingDocument (たとえば、AccountNumber を使用)、DepositaryIncomingDocument (FinancialTool を使用) など (最大 5 ~ 6 部門) になります。
次に、部門ごとに特定のドキュメント、TransferFundsBankIncomingDocument、CloseAccoundBankIncomingDocument などを指定できます。