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, не учитывает ваши отображения (и если кто-то знает способ обойти это, пожалуйста, напишите), но я считаю, что именно поэтому вы наблюдаете такое поведение.

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