NHibernate - стремятся получить коллекцию - PullRequest
0 голосов
/ 09 февраля 2011

Я создаю HQL-запрос, который использует нетерпеливую выборку для некоторых коллекций и свойств.Это запрос:

var result = Session.CreateQuery("from Match m left join fetch m.User u left join fetch u.ProfileItems pi where m.User.Id = :p1")
        .SetParameter("p1", user.Id)
        .List<Match>().ToList();

Это хорошо работает.Используя NHProfiler, я вижу, что он создает следующий SQL-запрос:

select (...) from `Match` match0_
       left outer join `User` user1_
         on match0_.UserId = user1_.Id
       left outer join `ProfileItem` profileite2_
         on user1_.Id = profileite2_.User_id
where  match0_.UserId =? p0

Теперь я могу перебрать результат Match экземпляров или даже User экземпляров, подобных этому:

foreach (User u in result.Select(m => m.User))
{
  // .. do something
}

... и он больше не попадет в базу данных.

Однако у объекта User есть свойство, которое не сопоставлено с базой данных IsOnline.Это делает некоторые вычисления, используя текущую дату.Как только я использую это свойство в выражении, база данных будет поражена.Например:

int i = result.Count(m => m.MatchingUser.IsOnline);

... попадет в базу данных для каждого пользователя, в моем случае 10 раз, используя этот запрос:

SELECT * FROM   `User` user0_ WHERE  user0_.Id =? p0

У меня есть два основных вопроса:

  1. Почему это?
  2. Как мне предотвратить это?

Спасибо!

1 Ответ

1 голос
/ 09 февраля 2011

Если это не ошибка копирования и вставки, вы используете свойство (MatchingUser), отличное от того, которое вы выбрали (Пользователь)

...