NHibernate-急切地获取集合
我正在创建一个HQL查询,它对一些集合和属性使用即时抓取。以下是查询: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(); 现在,我可以迭
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