3

単純なオブジェクトを重複レコードを含むテーブルにマッピングしていて、コードで重複を許可したいとします。このテーブルを更新/挿入/削除する必要はなく、レコードを表示するだけです。

マッピング ファイルに偽の (生成された) ID 列を配置して、NHibernate に行が一意であると思わせる方法はありますか? すべての列で重複が発生する可能性があるため、複合キーの作成は機能しません。

これが不可能な場合、この問題を回避する最善の方法は何ですか?

ありがとう!

編集:クエリが進むべき道のようでした

4

2 に答える 2

2

NHibernate マッピングは、変更を保存することを前提としているため、何らかの ID が必要になります。

テーブルの変更が許可されている場合は、ID 列 (SQL Server の命名 - データベースは異なる場合があります) を追加して、一意の ID を自動生成できます。既存のコードは影響を受けません。

データベースへの追加は許可されているが、テーブルへの追加は許可されていない場合は、RowNumber 合成 (計算) 列を含むビューを定義し、それをデータ ソースとして使用して読み込むことができます。データベース ベンダー (およびビューとインデックスを処理する製品) によっては、パフォーマンスの問題が発生する場合があります。

私が試していない別の方法は、クラスをテーブルではなく SQL クエリにマップすることです。IIRC、NHibernate は、マッピング ファイルでの名前付き SQL クエリの使用をサポートしており、それらをテーブルやビューの代わりに「データ ソース」として使用できます。

于 2008-11-04T08:17:05.960 に答える
0

データが読み取られている場合、ビューでクエリをラップし、ビューからエンティティを構築し、newguid() 列を追加するという簡単な方法が 1 つだけ見つかった場合、結果は次のようになります。

NEWGUID() を ID として選択 * FROM TABLE

ID は一意の主キーになります。上で述べたように、これは読み取り専用ビューにのみ役立ちます。クエリの後、ID には関連性がないためです。

于 2009-04-15T05:07:29.837 に答える