1

オブジェクトAには1対多の関連付けがあります:多くのオブジェクトB

データベースを見ると、名前を確認するために代理整数識別子を常に結合または副選択するのではなくTableB、一意で読み取り可能な文字列を確認したいと思います。A.Name

Nameの識別子としてマップできますが、NHibernateはのインスタンスが一時的であるか永続的であるかを識別できないためA、これにより多くの余分なクエリが発生します。SELECTA

ネイティブに割り当てられた代理キーと自然キーを組み合わせて、複合キーを使用できると思います。これは最適ではないようですが、いくつかの意見を聞きたいと思います。

私が本当に探しているのは、NHibernateが一時的なインスタンスを識別できるようにしながら、単一列の自然キーを使用するための戦略です。

  • 出来ますか?
  • マッピングとは何ですか-流暢またはhbm?

一方、これがすべてひどい考えであり、副選択を含むデータベースビューに依存する必要がある場合は、説明してください。

ありがとう。

4

1 に答える 1

1

これはひどい考えであり、「データベースを調べる」必要がある場合に結合を行うビューを作成する必要があります。

NameはテーブルAの主キーではないため、これはひどい考えです。

ただし、A.Nameに一意の制約を設定し、それを識別子としてマップすれば、それを実行できると思います。NHibernateがデフォルトで未保存の値の文字列をnullにするか空にするかはわかりませんが、を使用して指定できます

Id(x => x.Name).GeneratedBy.Assigned().UnsavedValue(string.Empty); // or null

string.Emptyを使用する場合、AのコンストラクターはNameをstring.Emptyに初期化する必要があります。また、Aから代理識別子を削除し、テーブル自体も目的を果たさないため、削除します。

于 2010-06-23T18:33:15.040 に答える