Domanda

Ciao a tutti, sto a calci le gomme su NHibernate e hanno un conoundrum ho graffiare la mia testa sopra per un po 'ora, lavorando con un database legacy con alcune relazioni piuttosto complesso.

ClaimRoot ha una chiave primaria di una claimGUID. ClaimRoot ha una borsa di Claimdetails associata da claimGUID (questo funziona a meraviglia).

Il problema è che ClaimRoot ha anche un uno opzionale per una relazione con ClaimFinancials (non tutti hanno ClaimRoots ClaimFinancials, ma la maggior parte lo fanno). Ma la PK per ClaimFinancials è un campo FormID. Questo campo esiste nel ClaimRoot, ma non è il PK.

ho postato una mappatura di seguito con colonne aggiuntive rimosse per proteggere gli innocenti.

  <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>

Grazie in anticipo! -Bob

È stato utile?

Soluzione

Supponendo che il FormID è utilizzare solo per il collegamento ClaimRoot e ClaimFinancials, suona come si desidera una relazione molti-a-uno da ClaimRoot a ClaimFinancials. Sostituire la proprietà formid su ClaimRoot con uno molti-a-.

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

Una relazione molti-a-uno può essere essere utilizzato anche se c'è un solo 'uno' sul 'molti' lato. Se stavate generando uno schema, è possibile specificare unique="true" per generare il vincolo nel database. Con un database legacy, che non importa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top