私は、EF 4.1に加えてリポジトリパターンを活用し、POCOエンティティへの積極的な読み込みを行うエンタープライズアプリケーションに取り組んでいます。通常、呼び出しは次のようになります。
public IEnumerable<SomeEntity> List(DateTime date)
{
using (var context = ContextFactory.CreateContext()) // Returns a DbContext
{
return CreateQuery<SomeEntity>(context)
.Include("PATH1")
.Include("PATH2")
.Where(...)
.AsNoTracking()
.ToList();
}
}
ある時点で、ビジネスレイヤーはこれらのエンティティをDTOに変換し、DTOはWCFを介してWebアプリケーションに送信されます。
積極的な読み込みはかなり高価なので、.Includeを最小限に抑えようとしています。そのため、関連するプロパティが(熱心に)読み込まれることもあれば、読み込まれないこともあります。ただし、ビジネスレイヤーは、関連するプロパティがエンティティにいつ存在するかわからないため、ObjectContextDisposedExceptionが発生します。その理由は私には完全に明らかであり、基本戦略を変更するつもりはありません(つまり、コンテキストをすぐに破棄します)。エンティティの読み込みに熱心です)。
ただし、特定の関連プロパティがロードされているかどうかを確認する必要があります。関連オブジェクトがnullであるかどうかの確認は機能せず(ObjectContextDisposedException)、使用できるIsLoaded()メソッドもありません。
ここでtry/catchブロックに固執していますか、それとも他のオプションがありますか?