4
在我的NHibernate映射中,我有两个对象 - Listing和User。一个用户可以有多个列表,以及(流利)映射设置为这样:Nhibernate QueryOver - 为什么我必须指定JoinQueryOver
上市:
References<User>(h => h.User).ForeignKey("fk_UserID").Not.LazyLoad().Fetch.Join().Cascade.SaveUpdate();
用户:
HasMany<Listing>(u => u.Listings);
这工作得很好。但是,当我开始使用QueryOver时,我尝试过:
DbSession.QueryOver<HaveListing>()
.Where(h => h.IsModerated == false)
.And(h => h.User.SpammedStatus == false)
其中失败。然而,这作品:
DbSession.QueryOver<HaveListing>()
.Where(h => h.IsModerated == false)
.JoinQueryOver(h => h.User)
.Where(u => u.SpammedStatus == false)
显然,使用后者是好的,但我想确保我绝不错过something-我的关系在映射定义,所以我真的需要指定每次加入为了做一个WHERE用户?如果没有必要,每次都加入这些连接将是一种浪费。
谢谢。我现在不打算使用LINQ提供程序,因为它对我的WHERE子句做了很奇怪的事情(http://216.121.112.228/browse/NH-2479表明它是SQL Server特有的) - 我在代码可读性我会失去SQL可读性/可能的效率。我会继续检查它! – Alastair 2011-02-16 19:46:51