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

Était-ce utile?

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:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top