LinqToEntities を使用してリポジトリ パターンを実装する方法 インターフェイスを実装する方法
2 に答える
「Castle Windor」以外はほぼこれが好きです。openticket.codeplex.com をご覧ください。
私は次のことを行います:
サービス層にはビジネス オブジェクトが含まれています。Inversion of Control を介してリポジトリに渡されます (Castle Windor が私の通常の選択です)。リポジトリは、ビジネス オブジェクトとエンティティ フレームワーク オブジェクトの間のマッピングを担当します。
利点: リポジトリ側でのデータ操作中に EF オブジェクトをロードするだけなので、オブジェクトの状態や EF オブジェクトのコンテキストに問題はありません。これにより、それらを WCF/Web サービスに渡すときの状況が緩和されます。
短所: Entity Framework の追跡機能の一部が失われ、データ オブジェクト (ef オブジェクト) を手動でロードする必要があります。楽観的同時実行性チェックが必要な場合は (たとえば、ビジネス オブジェクトのタイムスタンプを介して) 手動で行う必要があります。
ただし、後でリポジトリを変更できるため、一般的にはこのソリューションを好みます。これにより、さまざまなリポジトリを使用できます (たとえば、ユーザー オブジェクトは実際には EntityFrameworkRepository ではなく ASPNetAuthenticationRepository を使用しています) が、サービス レイヤーでは透過的です。
インターフェイスに関しては、サービス レイヤーのビジネス オブジェクトをパラメーター オブジェクトとして使用し、それらの EF オブジェクトをリポジトリ レイヤーの外に出さないようにします。それが役立つことを願っています