2009-07-24 4 views
2

Kann mir jemand sagen, ob es möglich ist, Kriterien zu einer NHibernate Lazy Loaded-Sammlung hinzuzufügen.NHibernate-Kriterien bei Lazyload

Zum Beispiel habe ich eine Abteilung, die Mitarbeiter enthält ... Ich bekomme die Abteilung per ID und dann faul laden die Mitarbeiter ... aber lassen Sie uns sagen, es gibt 1000 von Mitarbeitern und ich will nur die Mitarbeiter, die waren in den letzten 30 Tagen eingestellt.

GetDeptById (1)
      |
      --Lazy Last Mitarbeiter (wo HireDate> = 2009.07.01)

Scheinen, wie ich möglicherweise diese mit Filtern in der Zuordnungsdatei tun konnte ... aber kann ich irgendeine Art von Kriterien in der die Lazy Load im Code?

Antwort

2

Der beste Weg, dies zu implementieren, wäre mit einem Filter. Definieren Sie den Filter in den Mappings (Entity und Bag) und aktivieren Sie dann vor der Auswahl der "Abteilung" den Filter mit dem Parameter das gewünschte Datum.

Sie können das Mapping auch unverändert lassen und einen benutzerdefinierten Filter auf die Lazy Loaded-Sammlung anwenden.

session.CreateFilter(department.Employees, "HireDate >= :dateParameter").SetParameter("dateParameter", DateTime.Now.AddDays(-30)); 

Wenn das einzige, was Sie die Einschränkung tun möchte, ist anzuwenden, würde ich das Mapping-Filter-Option bevorzugen, weil diese Weise können Sie wahlweise die Sammlung eifrig holen kann, auf diese Weise in einem einzigen Wählen Sie das Objekt Graph mit .

Wenn Sie zusätzliche Operationen (wie Paging) durchführen möchten, wäre der CreateFilter besser, obwohl für komplexere Szenarien eine Abfrage, die auf die Mitarbeiter abzielt, besser wäre.