3

自動生成されたエンティティ データ モデル (生成されたオブジェクト クラス) を C# Web アプリのすべてのレイヤーで共有し、データ レイヤーでクエリ アクセスのみを許可するにはどうすればよいですか? これには、データ、ビジネス、プレゼンテーションという典型的な 3 層のアプローチが使用されます。

データ レイヤーはIEnumerable<T>ビジネス レイヤーに を返しますが、プレゼンテーション レイヤーにデータ レイヤー (エンティティ フレームワークがクラ​​スを自動生成する場所) の存在を認識させたくないため、型 T をプレゼンテーション レイヤーに返すことはできません。

データ モデルだけを含む別のレイヤーを用意することをお勧めしましたが、エンティティ フレームワークが提供するクエリ機能からデータ モデルを分離する方法がわかりません。

4

2 に答える 2

5

POCO エンティティ(.NET 4+)を使用する場合、これは簡単です (少なくとも簡単です)。その可能性はありますか?

Ben が言ったように DTO を作成することはできますが、基本的には、各エンティティを単純化して複製することになります。EF2 は "ダムダウン" エンティティを作成し、必要に応じて変更追跡、遅延読み込みなどを動的に追加します。

それ以外の場合、答えはできません。エンティティが Entity Framework に依存している場合、その依存関係をドラッグしない限り、アプリケーション全体でそれらを使用することはできません。その場合、DTO を使用する必要があります。これは、POCO エンティティのない EF 1 または EF 2 のサード パーティ オプションです。 http://automapper.codeplex.com/

編集:これらすべてについて詳しく知るための便利なリンクを次に示します。

  1. 一般的な MS ガイドライン: http://msdn.microsoft.com/en-us/library/bb738470.aspx
  2. POCO テンプレート: http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx
  3. 別のプロジェクトに移動する方法を含むPOCO テンプレート: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-poco-templates-for-the-entity-framework.aspx
  4. POCO プロキシ: http://blogs.msdn.com/adonet/archive/2009/12/22/poco-proxies-part-1.aspx
  5. モデルを分割する方法: http://blogs.msdn.com/adonet/archive/2008/11/25/working-with-large-models-in-entity-framework-part-2.aspx
  6. Employee Tracker サンプル アプリケーション (レイヤー、単体テスト、モック、リポジトリなど): http://code.msdn.microsoft.com/ef4/Release/ProjectReleases.aspx?ReleaseId=4279
于 2010-05-17T15:30:20.000 に答える
2

データ エンティティからDTOを作成し、DTO を表現層に渡すことができます。

于 2010-05-17T15:29:25.027 に答える