Загрузите коллекции с нетерпением в Nhibernate с использованием критериев API

StackOverflow https://stackoverflow.com/questions/2839357

Вопрос

У меня есть сущность, а казанным сущностями B и объектами C. Все объекты A, B и C имеют некоторые ссылки x, y и z, которые должны быть нетерпеливо загружены.

Я хочу прочитать из базы данных все объекты A и загружать коллекции B и с нетерпением с использованием API критериев. До сих пор я могу получить ссылки «a» с нетерпением. Но когда коллекции загружены, ссылки внутри них наносится лениво.

Вот как я это делаю

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

Картирование объекта A Использование свободно, как показано ниже. _B и _C являются частными айлистами для B & C соответственно в 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();

Я не хочу вносить изменения в файл отображения и хотел бы загрузить всю сущность с нетерпением. Т.е. я должен получить список A, где будет список B'S и C, чьи справочные свойства также будут загружены с нетерпением

Это было полезно?

Решение

Вы пытаетесь сделать картезианский продукт здесь. Я думаю, что Nibernate требует отображения отношений в качестве наборов вместо сумки для этого, поскольку сумки позволяют дубликаты.

Во всяком случае, декартовые продукты очень неэффективны. Вместо этого используйте несколько запросов или будущих запросов.

Видеть:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top