2010-06-02 13 views
10

Ich habe eine ältere Datenbank und eine Beziehung Eins-zu-eins zwischen zwei Tabellen. Die Sache ist, dass die Beziehung zwei Spalten verwendet, nicht eine. Gibt es eine Möglichkeit, in nhibernate zu sagen, dass beim Abrufen einer referenzierten Entität zwei Spalten in der Join-Anweisung verwendet wurden, nicht eine? Ich habe eine ähnliche Struktur TabelleViele-zu-eins mit mehreren Spalten

TaskProgress

  • TaskId ProgressId
  • AssignmentId
  • UserId

Aufgaben

  • TaskId
  • AssignmentId
  • Taskname

Jede Aufgabe kann in verschiedenen Zuordnungen asigned werden. Dies bedeutet, dass eine eindeutige Task für den Task-Fortschritt nur durch die Felder AssignmentId und TaskId begründet werden kann.

Ich versuche, diese zu nutzen:

References(x => x.Template) 
      .Columns() 
      .PropertyRef() 

Aber nicht bekommen kann, wie auf mehrere Spalten verbinden abzubilden, irgendwelche Ideen?

Antwort

5

Ich nehme von Ihrer Verwendung von PropertyRef im Beispielcode, dass die zwei Spalten keinen zusammengesetzten Primärschlüssel bilden. Wenn das der Fall ist, dann haben Sie kein Glück, da Property-Ref nur eine Eigenschaft akzeptieren kann. Gemessen an den Kommentaren in issue NH-1722 ist diese Funktionalität offensichtlich in Hibernate verfügbar, wurde aber nicht nach NHibernate portiert.

Aktualisierung: Das Schema, das Sie hinzugefügt haben, sieht wie ein Viele-zu-Viele mit zusätzlicher Datenbeziehung zwischen Aufgabe und Zuweisung aus. TaskProgress ist die Verknüpfungstabelle zwischen Aufgabe und Zuweisung. Wenn TaskProgress nicht über das zusätzliche UserId-Feld verfügt, können Sie dies als einfaches number-to-many modellieren. Da die Verknüpfungstabelle zusätzliche Daten enthält, wird es etwas komplizierter.

Viele-zu-viele mit zusätzlichen Daten werden normalerweise modelliert, indem ein Objekt erstellt wird, das die Verknüpfungstabelle (TaskProgress) darstellt und die Beziehung als zwei Eins-zu-viele-Beziehungen modelliert wird. Das heißt, Aufgabe und Aufgabe haben Eins-zu-viele-Beziehungen zu TaskProgress. TaskProgress verfügt über Eigenschaften für Task, Zuweisung und Benutzer.

+0

Gibt es eine Workaround, vielleicht Formel Verwendung? – Sly

+0

Keine, die ich kenne. Aber haben Sie wirklich eine 1: 1 Beziehung, die nicht mit dem Primärschlüssel zusammenhängt? Können Sie genügend Tabellendefinitionen veröffentlichen, um das Problem zu veranschaulichen? –

+0

Ich habe den ursprünglichen Beitrag aktualisiert, um weitere Details zu liefern – Sly

Verwandte Themen