Frage

ich habe ein Problem mit NHibernate versucht, eine kleine Hierarchie von Daten zu laden. Meine Domain-Modell sieht aus wie:

class GrandParent
{
    int ID{get;set;}
    IList<Parent> Parents {get; set;}
}

class Parent
{
    IList<Child> Children {get; set;}
}

class Child
{
}

und ich möchte eifrig Last alle Eltern und Kinder für einen bestimmten Großeltern. Diese Linq-to-NH Abfrage erstellt die korrekte SQL und lädt die Großeltern als erwartet: (das Beispiel übernimmt die Großeltern hat zwei Eltern, die jeweils zwei untergeordnete Objekte haben - so 4 untergeordnete Objekte insgesamt)

.
var linq = session.Linq<GrandParent>();
linq.Expand("Parents");
linq.Expand("Parents.Children");
linq.QueryOptions.RegisterCustomAction(c => 
    c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var grandparent = (select g from session.Linq<GrandParent>()
                   where g.ID == 1
                   select g).ToList();

Assert(grandparent.Count == 1); //Works
Assert(grandparent.Parents.Count == 2); //Fails - count = 4!

Die grandparent.Parents Sammlung enthält 4 Elemente, von denen 2 Duplikate sind. Es scheint, die DistinctRootEntityResultTransformer funktioniert nur auf Sammlungen 1 Ebene tief, so dass die Eltern Sammlung dupliziert wird je nachdem, wie viele Child-Objekte zu Elternteil hat.

Ist es möglich, NH zu bekommen, um nur die unterschiedlichen übergeordneten Objekte enthalten?

Vielen Dank.

War es hilfreich?

Lösung

Wenn Sie Ihre Zuordnung zu FetchType.Join eingestellt ist, versuchen Sie es zu FetchType.Select ändern.

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