Соблюдаются ли глобальные правила выборки поставщиком LINQ в NHibernate 3.0? - PullRequest
1 голос
/ 16 декабря 2010

Я только что обновил свой проект до NHibernate 3.0 и пытаюсь преобразовать некоторые из моих критериев в операторы LINQ. Кажется, все работает нормально, за исключением того, что новые операторы LINQ, похоже, не соответствуют правилам извлечения, которые я объявил в моих файлах сопоставления (используя FluentNHibernate).

Например:

public UserMap
{
    Id(x => x.Id);
    References(x => x.Course).Fetch.Join();
}

Теперь я опрашиваю всех пользователей так:

var users = Session.Query<User>().ToList();

Я бы ожидал, что возвращенной коллекцией будут все пользователи в базе данных с их нетерпеливо загруженными свойствами курса, а это именно то, что я получу при использовании операторов Criteria. Но при использовании поставщика LINQ запрос, созданный NH, не включает объединение в таблице курсов, поэтому все курсы должны загружаться лениво. Ожидается ли такое поведение? Если так, как я могу заставить NHibernate соблюдать правила извлечения, объявленные в сопоставлениях?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

У меня та же проблема и аналогичный подход к решению со спецификациями, отправленными в хранилище.Каждая спецификация имеет лямда-выражение, определяющее критерии.Предыдущий провайдер Linq уважал сопоставления, почему не новый?Или хотя бы по умолчанию для отображений, определенных с возможностью переопределения?Есть ли способ исправить этот недостаток?

0 голосов
/ 17 декабря 2010

Нет, они не. Вы должны указать явную выборку, используя Fetch / ThenFetch и FetchMany / ThenFetchMany.

...