2011-12-09 18 views
4

私は独自のDBの作成、インデックスの設定、ユニークな制約などを好みます。データベースからドメインモデルを生成することは、edmx Entity Frameworkデザイナーの手腕です。Entity Framework 4 DB-First Dependency Injection?

私はいくつかのリポジトリを依存性注入を使用して設定することに興味があります。私はStackOverflowのいくつかの記事と記事を見てきており、コードファーストのアプローチに焦点を当てているようです。 CRUDを処理する汎用リポジトリを作成し、Dependency Injectionを使用して実装の詳細を選択する方法はかなりわかりやすいです。

同じことをしたいと思いますが、edmxプロセスで生成されたドメインモデルは、IObjectContext/IObjectSetではなくObjectContext/ObjectSetを実装するのではなく、具体的なクラスを継承しているようです。

db-first/code生成テクニックを使用するときに依存性注入をどのように使用するかについて、私に指摘できる人はいませんか?

答えて

10

私はあなたの質問を誤解しているかもしれませんが、EDMXがObjectContextを継承するコードを生成しても、依存性注入を使用することはできません。 ObjectSetをリポジトリに挿入できないのではないかと心配しているようですが、それは使用するように設計されているわけではありません。

hereなどの一般的なリポジトリパターンの場合、IRepositoryインターフェイスはViewModels/Controllers/Whateverに注入するものです。

したがって、IObjectContextまたはIObjectSetをリポジトリに挿入しないでください。その代わりにIRepsoitoryを必要なクラスに挿入し、ObjectSetを使用するIRepositoryインターフェイスの実装を提供します。その後、あなたのIRepositoryインターフェイスを模擬してテストするか、まったく別の具体的なリポジトリ実装に切り替えて、他のコードに影響を与えることはありません。

私は現在、EF4 DB-firstと上記のリンクされたリポジトリパターンで全く同じことをやっていますが、これは非常にうまく動作しています。

+0

ファンタスティック記事CodeFirstリポジトリ& DIパターンと非常に似ているとして非常に簡単であること。私は早くそれを見つけただろうと願っています! – Sam