NHibernate で多対 1 の関係をモデル化しようとすると問題が発生します。この場合、「1」側のオブジェクトは列に一意の制約があります。問題は次のとおりです。
「Person」と「Country」の 2 つのテーブルがあります。各人物には、関連付けられている国が 1 つだけあります。国は多くの人を持つことができ (本当に! :))、国名は一意です。Person 側のマッピングは次のとおりです。
<many-to-one Name="Country">
<column Name="CountryId"/>
</many-to-one>
国側:
<property name="Name" unique="true">
<column name="Name" length="50">
</property>
データベースで、Country テーブルの Name 列に一意の制約を追加しました。Person インスタンスで Save() を呼び出すと、NHibernate は単に INSERTS を実行しようとしますが、Country Name が存在するかどうかを確認し、Person テーブルの CountryID 列でその ID を使用することを期待します。代わりに、データベース内の一意の制約に違反した結果として例外がスローされます。
私には、Nibernate が正しいことを行うのに十分なマッピング メタデータを持っている必要があるように思えます (または、プロパティの一意の属性がこれを保証していませんか?)。誰かがこれを行う方法を知っているか、回避策を持っていますか?
ありがとう、
マルティン