nHibernate Eager Загрузка во время выполнения

Мы используем UnitOfWorkScope от NCommon, который включает в себя функциональность nHibernate ISession. Наша цель - загружать сложные свойства по требованию, а не загружать их с помощью конфигурации. Идея состоит в том, что конкретный сервис, который извлекает сущность, может быть немного настроен с помощью вызывающего кода - иногда мы хотим, чтобы гидратировалась только родительская сущность, в других случаях мы можем также захотеть гидратировать сложные дочерние свойства.

Для этого мы делаем следующее:

  var iSession = unitOfWorkScope.CurrentUnitOfWork<NHUnitOfWork>().GetSession<ParentEntity>();

  iSession.CreateCriteria<ParentEntity>().SetFetchMode("Children", FetchMode.Eager);

После настройки сеанса мы используем функцию IRepository NCommon для извлечения сущностей:

  var parent = parentRepository.FirstOrDefault(x => x.Id == 123);

Однако, когда мы проверяем коллекцию parent.Children, мы получаем:

  NHibernate.Collection.Generic.PersistentGenericBag<ChildEntity>

... который говорит мне, что Eager-loading не произошло. Когда мы изменяем отображение NH, чтобы всегда вызывать энергичную нагрузку, мы видим детей правильно.

Кто-нибудь может пролить свет на это? Я предполагаю, что мы что-то упустили, так как FetchMode.Eager игнорируется.

1 ответ

Решение

Это было решение, найденное здесь:

http://slynetblog.blogspot.com/2011/11/in-spite-of-common-now-approach-of.html

Другие вопросы по тегам