collections de charge avec avidité dans NHibernate utilisant l'API de critères
Question
I ai une entité A qui les entités hasMany B et C. entités Toutes les entités A, B et C ont une certaine référence x, y et z qui doit être chargé avec impatience.
Je veux lire à partir de la base de données toutes les entités A, et charger les collections de B et C avec impatience en utilisant l'API de critères. Jusqu'à présent, je suis en mesure d'aller chercher les références dans « A » avec impatience. Mais lorsque les collections sont chargées, les références dans les sont chargés paresseusement.
Voici comment je le fais
AllEntities_A =
_session.CreateCriteria(typeof(A))
.SetFetchMode("x", FetchMode.Eager)
.SetFetchMode("y", FetchMode.Eager)
.List<A>().AsQueryable();
La cartographie de l'entité A à l'aide maîtrise est telle que représentée ci-dessous. _B et _C sont ILists privées pour B & C respectivement A.
Id(c => c.SystemId);
Version(c => c.Version);
References(c => c.x).Cascade.All();
References(c => c.y).Cascade.All();
HasMany<B>(Reveal.Property<A>("_B"))
.AsBag()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Inverse()
.Cache.ReadWrite().IncludeAll();
HasMany<C>(Reveal.Property<A>("_C"))
.AsBag()
.Cascade.AllDeleteOrphan()
.LazyLoad()
.Inverse()
.Cache.ReadWrite().IncludeAll();
Je ne veux pas apporter des modifications au fichier de mappage, et souhaitez charger toute l'entité A avec impatience. à-dire que je devrais obtenir une liste d'A où il y aura Liste des B et C dont les propriétés de référence sera également chargé avec impatience
La solution
Vous essayez de faire un produit cartésien ici. Je pense que NHibernate nécessite la cartographie des relations comme des ensembles au lieu de sacs à le faire, car les sacs permettent les doublons.
Quoi qu'il en soit, les produits cartésiens sont très inefficaces. Utilisez une des requêtes multi-requêtes ou à venir à la place.
Voir:
- Nhibernate: chargement désireux deux collections enfants (étant une liste de composants)
- https://nhibernate.jira.com/browse/NH-1471
- http: / /nhibernate.info/blog/2008/09/06/eager-loading-aggregate-with-many-child-collections.html
- http : //ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx