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