Als relativ neu zu NHibernate habe ich einige grundlegende Codierung geerbt, die ich ändern muss. Ich habe eine Reihe von Objekten vom Typ Gruppe. Jede Gruppe kann ein oder mehrere Kinder des Typs Gruppe haben und wiederum können die Kinder Kinder vom Typ Gruppe usw. haben. Jedes Gruppenobjekt hat eine Eigenschaft/ein Feld mit dem Namen Deleted mit dem Wert "deletedgroup" (eine Art des weichen Löschens). Wenn für eine Gruppe das Feld Gelöscht auf "deletedgroup" gesetzt ist, sollte dies nicht ausgewählt werden. Dies gilt auch für Kinder und Enkelkinder. Mit anderen Worten, ich muss eine Liste aller Gruppen erhalten, bei denen das gelöschte Feld nicht auf "deletedgroup" gesetzt ist. Ich habe dieses Stück Code geerbt, aber es enthält kein Kriterium für das gelöschte Feld, das neu ist, d.h. der Code ruft alle Gruppen ab. Wie erweitere ich den Code, um meine Anfrage zu erfüllen. Ich habe es mit .Where und .Criteria versucht aber ich bekomme entweder Kompilierungsfehler und die Einschränkung funktioniert nicht.NHibernate fetch einschließlich Kinder und ein Kriterium
Enherited Code (selektiert alle Gruppen):
var allGroups = ObjectFactory.GetInstance<IUnitOfWork>().Session
.QueryOver<Group>()
.Fetch(g => g.ChildGroups).Eager
.Fetch(g => g.Vacancies).Eager
.TransformUsing(new DistinctRootEntityResultTransformer())
.List();
Hat nicht funktioniert. Scheint so, als ob die Where-Klausel jede Gruppe herausfiltert, so dass das Ergebnis null Gruppen ist, genau wie ich die orignal-Abfrage mit einer Where-Klausel erlebt habe. Das Weglassen der Where-Klausel gibt alle Gruppen als ursprüngliche Abfrage zurück. – Torben
Ah. Brauchen Sie so etwas wie eine korrelierte Unterabfrage, die mit der 'Deleted! =" Deletedgroup "zuerst geeignete Gruppen findet und dann nur Gruppen zurückgibt, die sich in dieser Liste befinden? –
Ich habe meine Antwort mit diesem Konzept bearbeitet, aber ich bin mir nicht sicher, dass es genau das ist, wonach Sie suchen. –