NHibernate: не могу успешно загружать
Я использую NH 3.0 и FNH 1.1, перекомпилированные с NH3.
У меня есть пользовательская модель, где я хочу всегда загружать ее профиль при загрузке. Я использую провайдера linq из NH3, но не могу использовать его метод Fetch (из-за моего репозитория, который скрывает NHibernate и возвращает IQueryable, и того факта, что ToPagedList вызывается в запросе, поэтому я не могу поместить Fetch в качестве последнего вызова запроса).
В UserMap я установил:
HasOne(x => x.Profile)
.Not.LazyLoad()
.Cascade.All();
Но установка LazyLoad в положение OFF не помогает. Я тоже играл в режиме получения.
Я ожидаю, что если я определю это отображение, то мне даже не придется сообщать Linq, что я хочу, чтобы Profile был выбран при запросе сущности User. Линк должен почтить карту, нет?
1 ответ
У меня также есть эта проблема, и, к сожалению, я думаю, что это из-за дизайна. Поставщик NHibernate 3.0 Linq использует HQL под прикрытием, и HQL не учитывает ваши отображения в этом отношении. Например, если вы сделали
session.CreateQuery("из профиля").List()
Вы только получите список всех профилей, и ваш пользовательский класс не будет присоединен, даже если ваше отображение имеет external-join=true.
Если вы использовали старый поставщик NHibernate.Linq, который использовал API Critera или API Criteria напрямую:
session.CreateCriteria (). Список ()
вы получите список всех профилей, оставленных внешними, соединенными с пользователями, так же, как запрошен ваш файл сопоставления.
Теперь я не знаю, почему провайдер linq, поддерживаемый HQL, не учитывает ваши отображения (и если кто-то знает способ обойти это, пожалуйста, напишите), но я считаю, что именно поэтому вы наблюдаете такое поведение.