Frage

Ich habe eine Entität A, die HasMany Einheiten B und C Einheiten alle Einheiten A, B und C haben einige Referenzen x, y und z, die mit Spannung geladen werden sollen.

Ich möchte aus der Datenbank alle Einheiten A lesen, und laden die Sammlungen von B und C mit Spannung Kriterien API. Bisher kann ich die Referenzen in ‚A‘ eifrig holen. Aber wenn die Sammlungen geladen werden, werden die Referenzen in ihnen träge geladen.

Hier ist, wie ich es tun

            AllEntities_A =
            _session.CreateCriteria(typeof(A))
            .SetFetchMode("x", FetchMode.Eager)
            .SetFetchMode("y", FetchMode.Eager)
            .List<A>().AsQueryable();

Die Zuordnung einer Entität fliessend verwendet wird, wie unten gezeigt. _B und _C sind private ILists für B & C jeweils in 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();

Ich möchte nicht, Änderungen an der Mapping-Datei machen, und möchte die gesamte Einheit A mit Spannung laden. das heißt sollte ich eine Liste von A ist, wo es mit Spannung wird auch geladen Liste der B und C die Eigenschaften, deren Referenz wird

War es hilfreich?

Lösung

Sie versuchen, hier ein kartesisches Produkt zu tun. Ich denke, NHibernate erfordert die Beziehungen abbildet als Sätze anstelle von Taschen, das zu tun, da Taschen Duplikate erlauben.

Wie auch immer, sind kartesische Produkte sehr ineffizient. Verwenden Sie eine Mehr Abfrage oder zukünftige Abfragen statt.

Siehe auch:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top