1

ねえ、私はNHibernateでタイヤを蹴っていて、かなり複雑な関係を持つレガシーデータベースを操作して、少し頭を悩ませてきた難問を抱えています。

ClaimRootには、claimGUIDの主キーがあります。ClaimRootには、claimGUIDによって関連付けられたClaimdetailsのバッグがあります(これは扱います)。

問題は、ClaimRootがClaimFinancialsとオプションの1対1の関係を持っていることです(すべてのClaimRootsがClaimFinancialsを持っているわけではありませんが、ほとんどが持っています)。ただし、ClaimFinancialsのPKはFormIDフィールドです。このフィールドは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>

前もって感謝します!-ボブ

4

1 に答える 1

1

FormIDがClaimRootとClaimFinancialsのリンクにのみ使用されると仮定すると、ClaimRootからClaimFinancialsへの多対1の関係が必要なように思われます。ClaimRootのFormIdプロパティを多対1に置き換えます。

  <class name="ClaimRoot" table="tbl_ClaimRoot" schema="DB1.dbo">
    ...
    <many-to-one name="ClaimFinancials" column="FormID" />
    ...
  </class>

「多」側に「1」しかない場合でも、多対1の関係を使用できます。スキーマunique="true"を生成している場合は、データベースに制約を生成するように指定できます。レガシーデータベースでは、それは問題ではありません。

于 2009-11-24T10:54:12.077 に答える