2016-11-28 13 views

答えて

0

DbContext実装をDAL(データアクセスレイヤー)に配置します。おそらくこれについては異なる意見が出ますが、私はリポジトリや作業単位のパターンを実装しません。技術的には、DBContextは作業単位であり、IDbSetはリポジトリです。独自のものを実装することで、抽象化の上に抽象化を追加します。

これに関する詳細hereおよびhere

+0

ほとんどの場合、私は考えがありました。なぜこれを明らかにするためにMicrosoft ASP.Netが提供していますか? –

0

DALはData Access Layerの頭字語です。 DbContext、リポジトリ、作業単位は、データの操作に関係しているため、間違いなくDALに配置する必要があります。

0

この件に関しては、多くの意見がありますので、 "Should"はおそらく正しい単語ではありません。 あなたが本のうち、これらのパターンを実装する場合、私はASP.NETの連中から、このリンクをチェックアウトします: https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

しかし、私は実際にこのようにそれを層に開始しました:

コントローラ/ロジック< - ビジネスロジックと境界オブジェクトが作成され、変換される場所。

リポジトリ< - 貯蔵機構の実際の実装が存在する - 持続性およびトランスエンティティおよびクエリに関連するロジックが

ストア<オブジェクト。これはインタフェースの背後に抽象化されています。

この方法は、ビジネスロジックとリポジトリロジックの両方がテスト可能であり、デカップリングされており、永続性の欠如または欠如のメカニズムを自由に使用できることを利用しています。アプリケーションの残りの部分が何も分かっていなければ

これは他のパターンと同様にオフコースですが、これは私がこのことをとることです。

DbContextは、DALの境界を超えることはありません。リポジトリまたは作業単位をそこに置く場合は、自由で、詳細や依存関係を上向きに漏らさないようにしてください。 DbContextは、できる限りきれいに保つために、可能な限り狭い範囲にスコープする必要があります。そのコンテキストがどこにあるのかわからない...保護を身につけてください!しかし、冗談はさておき、非同期、マルチスレッド、マルチノード、大規模なアプリケーションを持っていれば、これらのDbContextをどこを通しても、一般的な並行性とデータ競合の問題になります。

私が気に入っているのは、コントローラに注入するInMemoryストアから始めることです。そのストアが複数のエンティティにサービスを提供し、永続ロジックがますます複雑になるとすぐに、リポジトリを上にしてストアにリファクタリングします。私のテストがすべて合格し、私が望むように動作するようになると、私はそのストアのデータベースまたはファイルシステムベースの実装を作成し始めます。

また、これはかなり一般的な質問であり、「真の」回答はほとんどなく、多くの意見しかないので、私の意見もここにあります。

これに関する多くの意見は有効で、長所と短所が異なります。重要な点は、必要な強みと弱みをどのように処理するかを理解することです。

0

リポジトリにはDbSet<T>オブジェクトへの参照が必要です.1つ以上のリポジトリから追加、更新、または削除した後はUnitOfWorkからSaveChangesを呼び出す必要があります。したがって、作業単位の実装にDbContextを配置する必要があります。

関連する問題