2

エンティティによってアプリ全体で使用されるテーブルがあります。私は同じ列セットを返すビューを持っていますが、実際にはいくつかの悪い正規化を回避しようとするそれ自体のユニオンです (アプリは大きく、部分的に私の手に負えません。この部分は避けられません)。

このビューを使用して同じタイプのコレクションを生成できるように、エンティティ 4 でテーブルとまったく同じビューを同じタイプとして扱うことは可能ですか? この質問は nhibernatem で可能であることを示しているようですが、エンティティのようなものは見つかりません。ナビゲーション プロパティを引き続き Include() に使用できるという追加のボーナスになりますが、これは必須ではありません (いつでも手動で参加できます)。

4

2 に答える 2

0

EF はオブジェクトからデータベース エンティティへのマッピングで動作するため、これを直接行うことはできません。必要なのは、クエリされたデータベース エンティティを動的に変更するようなものです。私の知る限り、オブジェクト コンテキストを手動で変更しない限り、これは不可能です。

于 2012-04-20T08:30:20.233 に答える
0

ビューを完全に別のテーブルであるかのように扱うことができる限り、EF ランタイムは気にしません。私が予想する 2 つの課題は次のとおりです。

  1. ツール: このウィザードでは、リバース エンジニアリング (つまり、データベース ファースト) を行うときにビューを選択できます。確かに、「既存のデータベースに対して最初にコードを使用する」ことができる場合、ビューが単なるテーブルであると偽ることはできますが、データベースの作成または移行のスクリプト作成に関するヘルプは得られません。

  2. 更新: 一般に、ストア プロシージャ マッピングを設定するビューの更新を実行できます (これは、v1 以降の EF デザイナーまたは EF6 以降の Code First で利用できます)。ビューを直接更新可能にするか、代わりにオフ トリガーを使用することもできます (詳細については、こちらの「更新可能なビュー」を参照してください)。私の記憶が正しければ、データベースで生成された値 (ID 列など) を取得するために EF によって生成された SQL は、場合によっては、代わりにオフのトリガーと互換性がありません。さらに別の方法として、アプリケーションでビューを読み取り専用として扱い、実際のテーブルを介してすべての更新を実行する方法があります。これは別のエンティティとしてマップします。ビューと元のテーブルのメモリ内エンティティは同期されないことに注意してください。

お役に立てれば!

于 2013-08-16T20:05:06.277 に答える