Frage

Kann nicht erhalten NHibernate die richtige Abfrage zu generieren. Es hält mit dem Primärschlüssel der beiden Tabellen I für die Eins-zu-Eins-Beziehung bin bei, und ich kann nicht herausfinden, wie in einen der Tabellen den Fremdschlüssel angeben.

tableA      tableB
{ aID,      { bID,
  bID,        z,
  c,          y,
  d }         x }

so sollte der tableA zu tableB verbinden mit tableA.bID = tableB.bID. Wie kann ich für tableA dies in der Abbildung angeben? Ich verwende die tableA Klasse eine Reihe von tableA und eine Reihe von tableB abzurufen, wie es eine echte 12.59 Beziehung ist.

erzeugt NHibernate die SQL-Tabellen mit tableA.aID = tableB.bID zu verbinden, was falsch ist.

Das funktioniert nicht:

<class name="tableA" table="tableA">
  <id name="aID" column="aID" />
  <property name="bID" column="bID" />
  <property name="c" column="c" />
  <property name="d" column="d" />
  <one-to-one name="otherThing" class="tableB" foreign-key="bID" />
</class>

<class name="tableB" table="tableB">
  <id name="bID" column="bID" />
  <property name="z" column="z" />
  <property name="y" column="y" />
  <property name="x" column="x" />
</class>
War es hilfreich?

Lösung

Das ist der richtige Weg, es zu kartieren:

<class name="tableA" table="tableA">
  ...
  <many-to-one name="otherThing" class="tableB" column="bID" unique="true" />
</class>
  • Ich gehe davon aus, das ist wirklich eine Eins-zu-eins, daher der unique.
  • Sie sollten jede Spalte Karte ONCE. Wenn es sich um eine Beziehung ist, dann ist es nicht ein int-Eigenschaft.

Eine Referenz von tableB auf tableA würde umgesetzt werden:

<class name="tableB" table="tableB">
  ...
  <one-to-one name="A" class="tableA" property-ref="otherThing" />
</class>

Das ist alles dokumentiert in http: // nhibernate. info / doc / nh / en / index.html # Mapping-Deklaration-OneToOne

Andere Tipps

Sie sollten nicht brauchen die Eigenschaft als eine Eigenschaft in Ihrer Mapping-Datei specifiy, wenn Sie auch eine Eins-zu-Eins-Beziehung für den gleichen Wert zu definieren. Ich habe nicht eins-zu-eins verwendet, so kann es ein anderes Problem sein, aber ich würde die Zeile entfernen:

<property name="bID" column="bID" /> 

von tableA und sehen, ob das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top