2009-07-24 9 views
2

Quelqu'un peut-il me dire s'il est possible d'ajouter des critères à une collection NHibernate paresseuse? Par exemple, disons que j'ai un département qui contient des employés ... Je reçois le département par carte d'identité et ensuite je charge les employés ... mais disons qu'il y a des milliers d'employés et je veux seulement les employés qui étaient embauché au cours des 30 derniers jours.Critères NHibernate sur lazyload

GetDeptById (1)
      |
      --Lazy employés de charge (où HireDate> = 7/1/2009)

On dirait que je pourrais peut-être faire avec des filtres dans le fichier de mappage ... mais je peux ajouter une sorte de critères la charge paresseuse dans le code?

Répondre

2

La meilleure façon d'implémenter cela serait avec un filtre. Définir le filtre dans les mappings (entité et le sac) et puis avant de sélectionner le "département" activer le filtre avec le paramètre de la date que vous voulez. Vous pouvez également laisser le mappage tel quel et appliquer un filtre défini personnalisé à la collection chargée paresseuse.

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

Si la seule chose que vous voulez faire est d'appliquer la restriction, je préfère l'option la cartographie filtre, car cette façon, vous pouvez sélectivement désireux-fetch la collection, ayant ainsi le graphe d'objet en une seule sélection .

Si vous souhaitez effectuer des opérations supplémentaires (telles que la pagination), CreateFilter est préférable, mais pour les scénarios plus complexes, une requête ciblant les employés serait préférable.