NHibernate-急切地获取集合

NHibernate-急切地获取集合,nhibernate,eager-loading,Nhibernate,Eager Loading,我正在创建一个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(); 现在,我可以迭

我正在创建一个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();
现在,我可以迭代
Match
实例的结果,甚至可以迭代
User
实例,如下所示:

foreach (User u in result.Select(m => m.User))
{
  // .. do something
}
。。。而且它不会再次访问数据库

但是,用户对象具有未映射到数据库的属性IsOnline。这将使用当前日期进行一些计算。只要我在表达式中使用此属性,数据库就会被命中。例如:

int i = result.Count(m => m.MatchingUser.IsOnline);
。。。将使用以下查询为每个用户命中数据库,在我的情况下为10次:

SELECT * FROM   `User` user0_ WHERE  user0_.Id =? p0
我有两个主要问题:

  • 为什么会这样
  • 我如何防止这种情况

  • 谢谢

    除非是复制和粘贴错误,否则您使用的属性(MatchingUser)与您获取的属性(User)不同。

    您的映射看起来如何?说真的,您不知道这让我感觉有多愚蠢:-)这昨天花了我两个小时的时间。谢谢你详细阅读我的帖子。
    SELECT * FROM   `User` user0_ WHERE  user0_.Id =? p0