異なるキーでマンツーマン/ワンに多くのNHibernate
-
21-09-2019 - |
質問
は、すべてのねえ、私はNHibernateの上でタイヤを蹴る、私はいくつかのかなり複雑な関係を持つレガシーデータベースでの作業、今少しのために上で、私の頭を悩まれています。
conoundrumを持っていますClaimRootはclaimGUIDの主キーを持っています。 ClaimRoot(これは御馳走を作品)claimGUIDによって関連付けClaimdetailsの袋を持っています。
問題はClaimRootもClaimFinancials(すべてではないClaimRootsがClaimFinancialsを持っているが、ほとんどがそう)との一対一の関係へのオプションのいずれかを持っているということです。しかしClaimFinancialsのためのPKは、フォームIDフィールドです。このフィールドはClaimRootに存在しますが、PKではありません。
私は無実を保護するために除去余分な列で、以下のマッピングを掲載しました。
<class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
<id name="ClaimGUID">
<generator class="guid"/>
</id>
<property name="FormID" />
<property name="LastFormNoteText" />
<bag name="ClaimDetails" inverse="true">
<key column="ClaimGUID"/>
<one-to-many class="ClaimDetails"/>
</bag>
</class>
<class name="ClaimDetails" table="tbl_ClaimDetails" schema="DB2.dbo">
<id name="RowID">
<generator class="native"/>
</id>
<property name="ClaimGUID" />
<property name="SeqNo"/>
<property name="B1A_InsID" />
<many-to-one name="Root" column="ClaimGUID" foreign-key="ClaimGUID"/>
</class>
<class name="ClaimFinancials" table="tbl_ClaimFinancials" schema="DB1.dbo">
<id name="FormID">
<generator class="native"/>
</id>
<property name="CreatedDate"/>
<property name="SubmittedDate" />
</class>
事前に感謝します! -Bob
解決
あなたはClaimFinancialsへClaimRootから多対1の関係を望むように
フォームIDのみClaimRootとClaimFinancialsをリンクするために使用されると仮定すると、それが聞こえます。多対一でClaimRoot上のフォームIDプロパティを交換します。
<class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
...
<many-to-one name="ClaimFinancials" column="FormID" />
...
</class>
「多くの」側にのみ「1」は存在していても、多対1の関係を使用することができます。スキーマを生成した場合は、データベース内の制約を生成するunique="true"
を指定することができます。レガシーデータベースと、それは問題ではないでしょう。
所属していません StackOverflow