1

私のDBには、まったく同じ列を持つ2つのビューがあります(各ビューは、リンクサーバーを介して異なるリモートDBからのデータを参照します)。

両方のビューに同じ列があり、論理的に同じデータを表しているためです。

状況によっては、異なるビューに保存されているデータの結合だけでなく、各ビューからの単一のデータも個別に必要です。

この状況で使用するのに最適なマッピングは何ですか? 識別子の値を持つ 1 つのエンティティのみで 2 つのビューを結合するのに役立つ特定のマップがありますか?

ここに例があります:

VIEW1

Col1 | Col2

X1 | Y1

X2 | Y2

VIEW2

Col1 | Col2

K1 | Z1

K2 | Z2

状況 1 - データの結合

VIEW1 U VIEW2 = (X1,X2,K1,K2)(Y1,Y2,Z1,Z2)

状況 2 - 各ビューからの単一データ

VIEW1 = (X1,x2)(Y1,Y2)

VIEW2 = (K1,K2)(Z1,Z2)

4

1 に答える 1

1

私はあなたの2つのビューの結合として定義された3番目のビュー(あなたの状況1のように見えます)に行き、3番目の列Discrimを識別子の値として追加します。forの値、 1forView1の値を考えてみましょう。2View2

次に、「クラス階層ごとのテーブル」継承マッピングの状態(http://nhibernate.info/doc/nh/en/index.html#persistent-classes-inheritance section 8.1.1)に移動し、各サブクラスをそれぞれにマッピングします。識別子の値を使用して、設定された行を表示します。

このようにして、スーパークラスを介してオブジェクトのセット全体をクエリすることも、対応するサブクラスをクエリすることでビューの1つだけをクエリすることもできます。

ビューが同じIDを共有している場合、IDがintで0が共有されていない場合、回避策は、3番目のビューでView1からのIDを負の数に変換し、View2からのIDに正の数を残すことです。IDの保存を計画している場合、またはIDを指定して別の方法でデータにアクセスする場合は、コードで忘れてはならない規則。

于 2013-03-15T14:44:53.930 に答える