2010-12-29 13 views
1

Das ist stuff ive schon oft gemacht aber mein Verstand blendet gerade aus, ich werde versuchen einen einfachen Überblick über meine aktuelle Situation zu geben.Mapping-Element via Füge-Tabelle mit NHibernate

Ich habe derzeit drei Tabellen wie unten dargestellt:

Office > id, name 
Person > id, name 
Office_Personnel > office_id, person_id 

Ich habe dann ein Modell für die Person (id, name) und Büro, aber das Office-Modell enthält Personalinformationen:

public class Office 
{ 
int Id {get;set;} 
string Name {get;set;} 
ICollection<Person> Personnel {get;set;} 
} 

Mapping Person ist einfach, aber jetzt bin ich ein wenig ratlos, warum Office nicht richtig zuordnen. Ich entschied mich für einen Satz zu verwenden, wenn ich das Personal war, Diagramme, da es keine Duplikate sein sollte, aber es scheint nicht zu arbeiten, wie ich erwarten würde ...

<set name="Personnel" table="office_personnel" cascade="all"> 
    <key column="office_id" /> 
    <one-to-many class="Person"/> 
</set> 

Jetzt eine Sache, die mich schlägt als Seltsam ist, dass es keinen Hinweis darauf gibt, für welche Person (Person_ID) verbindlich sein sollte. Es wird versucht, die Spalte * office_id * in der Personentabelle zu finden.

Ich bin sicher, das ist nur ein einfaches Problem und ich bin ein Idiot, aber jede Hilfe wäre großartig!

Auf einer Seite zur Kenntnis, war ich mit einem Gewicht, wenn ich noch einen Mann mittleren Tisch mit plagen sollte, da ich direkt eine office_id Spalte in der Tabelle Person setzen könnte, aber ich bin nicht 100% sicher, ob in meinem Echt Projekt der Klasse Person in mehreren Büros weiter auf der ganzen Linie sein könnte ...

Antwort

1

um dies korrekt abzubilden, müssen Sie entweder haben drei Einheiten:

Person 1 <-> n Personnel n <-> 1 Office 

oder als viel Karte to-many association mit Join-Tabelle (siehe Abschnitt 8.3 des Hibernate do cs)

Person n <-> n Office 
+0

Passend zu seinem Modell, letzteres ist es angemessener. –