2009-08-13 3 views
0

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?

+0

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

Antwort

1

Sind Sie sicher, dass es richtig funktioniert? Ich habe das gerade getestet und ein Kind zu jeder Kollektion hinzugefügt und wie erwartet hatte jede Kollektion die gleichen 2 Kinder.

+0

Ja, Sie haben Recht. Es funktioniert nicht wirklich. Ich glaube, ich habe mich geirrt, weil ich es in einer NHibernate-Sitzung getestet habe und NHibernate kein Objekt aus der Datenbank erstellt habe. – kimsk