依存性注入を使用するためにインフラストラクチャ レイヤーでインターフェイスを定義しましたが、インフラストラクチャ レイヤーとサービス レイヤーで、EF dll への参照を追加せずにインターフェイスを使用して DBContext の依存関係を解決するにはどうすればよいかという問題があります。
2 に答える
アプリケーションからEFを完全に非表示にする必要がある場合は、リポジトリパターンを使用し、リポジトリの背後にEFを非表示にして、POCOエンティティを生成(または書き込み)する必要があります。
より実用的な場合は、IQueryableをサポートする汎用リポジトリを使用できます。これにより、優れた開発と単体テストのエクスペリエンスが可能になりますが、何を選択するかはあなた次第です。
T4 ファイル (別名 T4 テンプレートまたは .tt ファイル) を変更して、コンテキストと共にインターフェイスを作成し、それらを 2 つのそれぞれの別の T4 ファイルに分割して、別のアセンブリに配置することもできます。ただし、コンテキストが ObjectQuery の代わりに IQueryable を返すようにすることもできます...
メモリ内ではなくデータベース上で実行される最適化されたクエリを作成するには、そのクエリの下にあるテクノロジを考慮する必要があります。一般的なクエリを作成し、メモリ内リストで単体テストを行ってから SQL に変換することを期待することはできません。修正し、効率的に、例外なく実行します。- 実際のデータベース (デモ データを使用) でクエリをテストする必要があります。
あなたがすべきことは、DAL テクノロジーをその上のレイヤーから隠すサービスを実装することですが、その実装内では EF の全機能を使用して可能な限り効率的に動作します。
これらのサービスをモックして、その上のレイヤーをテストし、テスト DB を使用して (たとえば、テスト クラスによって作成および開始された LOCALDB インスタンスを使用して)、サービス自体を EF の使用と一緒にテストできます。
多くの関連リンクのいくつか:
Generic Repository With EF 4.1 ポイントは何
ですか ASP.NET MVC3 および Entity Framework コード ファースト アーキテクチャ
Is UnitOfWork および GenericRepository パターンは EF 4.1 コードでは最初に冗長ですか?
https://softwareengineering.stackexchange.com/questions/133448/unit-integration-testing-my-dal