私は 4 層の ASP.Net Web アプリケーションを構築しています。レイヤーは次のとおりです。
- データレイヤー
- エンティティ層
- ビジネスレイヤー
- UIレイヤー
エンティティ レイヤーにはデータ モデル クラスがあり、T4 テンプレート (POCO) を使用してデータレイヤーのエンティティ データ モデル (edmx ファイル) から構築されます。エンティティ レイヤーは、他のすべてのレイヤーで参照されます。
私のデータレイヤーには、次のような機能を持つ SourceKeyRepository というクラスがあります。
public IEnumerable<SourceKey> Get(SourceKey sk)
{
using (dmc = new DataModelContainer())
{
var query = from SourceKey in dmc.SourceKeys
select SourceKey;
if (sk.sourceKey1 != null)
{
query = from SourceKey in query
where SourceKey.sourceKey1 == sk.sourceKey1
select SourceKey;
}
return query;
}
}
このアプリケーションの他のレイヤーでクエリを実行したくないため、遅延読み込みは無効になっています。UI レイヤーの情報にアクセスしようとすると、次のエラーが表示されます。
ObjectContext インスタンスは破棄されており、接続を必要とする操作には使用できなくなりました。
これは、私の DataModelContainer "dmc" が破棄されたためだと確信しています。この IEnumerable オブジェクトをデータ層から返して、ObjectContext に依存せず、DataModel のみに依存するようにするにはどうすればよいですか?
データ層でのみ遅延読み込みが発生するように制限する方法はありますか?