AKTUALISIERT: Dies ist völlig falsche Annahme. Ich habe es erneut getestet und tatsächlich habe ich mich geirrt. NHibernate generiert SQL, das alle untergeordneten Zeilen in beide untergeordneten Listen aufnimmt. Danke Sirrocco für den Kommentar. Ich denke, die bessere Frage ist, wie wir so etwas wie diese Arbeit machen könnten.Woher weiß NHibernate, in welche Klasseneigenschaften Werte eingefügt werden sollen?
Ich modifizierte den Code ein wenig von Fluent NHibernate Beispiele in Wiki.
Modell
public class Parent
{
public IList<Child> Children1 { get; set; }
public IList<Child> Children2 { get; set; }
}
public class Child
{}
Schema
table Parent (
ID int primary key
)
table Child (
ID int primary key,
ParentID int
)
Fluent Mapping
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
HasMany<Child>(x => x.Children1);
HasMany<Child>(x => x.Children2);
}
}
Wie Sie sehen können, althou gh die Klasse Parent
hat zwei Child
Listen (d. h. Children1
und Children2
), wenn sie den Datenbanktabellen zugeordnet sind, gibt es in der Tabelle nichts, das besagt, welche Kinderzeile in Children1
oder Children2
Listen sein sollte.
Aus der Datenbankperspektive wissen wir nur, welche untergeordnete Zeile zu welchem übergeordneten gehört, aber nicht, welche untergeordneten Listen.
Dies scheint jedoch in NHibernate richtig zu funktionieren. Gibt es irgendetwas hinter der Szene?
Es gibt ein gutes Beispiel und eine Lösung, die in Stackoverflow gepostet werden, wenn jemand interessiert ist. http://stackoverflow.com/questions/1773239/how-can-i-use-fluent-nhibernate-automapping-with-multiple-lists-of-the-same-type – kimsk