次のケースを検討してください。
別の2つに継承された基本クラスがあります。たとえば、次のようになります。
class Base
{
}
class DerivedA : Base
{
}
class DerivedB : Base
{
}
次のようなコードでベースエンティティをリクエストすると
context.Base.Where(q => q.Id == id).First();
Entity Framework は、すべての派生エンティティへの結合の完全なセットを生成するため、クエリのパフォーマンスが許容範囲を下回ります。私が望むのは、派生エンティティに結合せずに基本エンティティのみをロードすることです。
私が見つけた唯一の解決策は、http://blogs.msdn.com/b/alexj/archive/2009/09/17/tip-35-how-to-write-oftypeonly-tentity.aspxに記載されています。しかし、それは私にはうまくいきませんでした。EF は依然として巨大なクエリを生成します。
次のようなクエリを記述します。
context.Base.Where(q => !(q is DerivedA) && !(q is DerivedB)).First();
派生型の量が絶えず増加しているため、私にも適していません。
私が言及したもの以外に考えられる解決策はありますか?