1

EF の専門家のアドバイスがどうしても必要です。DDD 内の複数のテーブルにまたがるカスタム エンティティをどのように作成しますか? 私が知っていることから、3つの可能な解決策があります:

  1. モデルにカスタム エンティティを作成し、それに対して DefiningQuery を追加します。これは、そのエンティティへのビューとして機能し、基本的に純粋な SQL で複数のテーブルを結合します。

  2. プロパティとして他のエンティティを持つ POCO クラスとしてカスタム エンティティを作成します。LINQ でクエリを実行する場合、必要なデータを最初に匿名オブジェクトに射影し、次にそのカスタム エンティティに射影します。

  3. 複数のテーブルにまたがるビューを DB に作成し、それをモデルに追加する

最初のオプションでは、Oracle 準拠の SQL クエリを記述する必要があるため、特定のデータ ソース実装 (Oracle) への依存関係が作成されます。

2番目のソリューションのカスタムオブジェクトはモデルの外で定義されており、TBHは私が最も気に入っているものであり、LINQを理解する必要がある人を除けば、実際の落とし穴は見られません:)

3 番目のオプションは、多くの DB ビューを作成することを意味しますが、DBA が満足するかどうかはわかりません。

どちらの解決策がより合理的に聞こえるか、ご意見をお聞かせください。ありがとう

4

1 に答える 1

1

データベース テーブルに 1 対 1 の関係が正しく構成されている場合は、エンティティの分割を使用できます。1 対 1 の関係がなければ、テーブルのスパンは EF の観点から決定論的ではありません。

上記のオプションに加えて、 EDMX ファイル内のカスタム POCO にマップされたQueryView - ESQL クエリを使用することもできます。これは、マッピング内に隠されている (ストレージに依存しない) 1 番目と 2 番目のオプションの組み合わせのようなものです。問題は、QueryView が ESQL のサブセットのみをサポートするため、実際に何をマップするかに依存することです。

于 2012-06-11T19:44:54.403 に答える