2009-05-20 7 views
6

新しいアプリケーションを作成するのに忙しかったですが、基本的に私は自分のデータアクセス、サービスレイヤ、プレゼンテーションレイヤーを持っています...すべて素晴らしいですが、EFから返されるエンティティクラスを使用しています。問題はここでプレゼンテーションレイヤーに渡して、プレゼンテーションレイヤーにエンティティフレームワーク参照/データアクセスを追加する必要があります - 不十分:リポジトリパターンを使用してEntity Frameworkで使用するAutomapper?

私の考えは次のとおりであり、右のラインを下って行く...

  1. は、プレゼンテーション層、サービス層への参照を持っているので、などを注文し、顧客などのサービス層でクラスのセットを作成します。..

  2. とき、顧客エンティティがデータアクセスで返されます。エンティティクラス、つまりCustomerをサービスに返します。私はここでマッピングをするだろう - 私はこれが好きかどうかはっきりしない?

  3. サービス層に配置してデータアクセスをマッピングすると、マッピングに使用するこれらの「標準クラス」に最適な場所があります。この場合、Dataccess>サービスとして循環参照が作成され、サービス> DATAACCESS .. - それは私がこれの世話をするためにAutomapper(http://www.codeplex.com/AutoMapper)を使用して考えていた唯一の方法、すなわちサービス> DATAACCESS

する必要があり、私は右の行にしています?

私は唯一のことは、私がデータアクセスからサービス層(Iqueryableを使用して)に戻ったときに、これらをエンティティクラスからマップし、標準コレクションクラスを使用する必要があるということです。

私はこれが混乱していると思います。エンティティクラスにアクセスできるようにするために、プレゼンテーションレイヤでエンティティフレームワーク/ dataaccessへの参照が必要なため、エンティティクラスを使用していないと感じます。

答えて

3

あなたはEF v1の弱点の1つに当たっています。今のところ、AutoMapperを使ってルートを進めると、EFエンティティを「ストレート」ビジネスエンティティに変換して、上位レイヤで使用することができます。

また、.NET 4.0/Visual Studio 2010の予定であるEF v4では、多くの問題点が解決されています。つまり、独自のストレートPOCO(Plain Old CLR Objects)もっと。 EF Design Blogをチェックしてください。チームは最近、EF v4に関して非常に面白い、非常に有望な数の投稿を掲載しています。私はそれを楽しみにしています!

マルク・

0
  1. 、あなたのコア/共通プロジェクトにそのインターフェイスを抽出し、Webプロジェクトが使用する、リポジトリまたはサービスからインターフェイスタイプを返す場合は、WebプロジェクトにEFのオブジェクトを使用することができます。

    部分クラスのお客様を:あなたはEFのオブジェクトが部分クラスを作成し、すぐそこに追加することによって、あなたのインターフェイスを実装することができます ICustomer

  2. あなたは1トリックを行うことができるにもかかわらず、あなたはおそらくとにかくマップするためにautomapperを使用する必要がありますカスタムViewModelオブジェクトのエンティティを特定のビューに適合させることができます。リポジトリ/サービスのクエリメソッドでDTO/ViewModelsを直接返すようにすることもできます。必要に応じてクエリを効率的に行うことができますが、追加のEFマッピングが必要になります。

関連する問題