在我的NHibernate映射中,我有两个对象 - Listing和User.一个用户可以拥有多个列表,并且(Fluent)映射设置如下:
清单:
References<User>(h => h.User).ForeignKey("fk_UserID").Not.LazyLoad().Fetch.Join().Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)
用户:
HasMany<Listing>(u => u.Listings);
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,当我开始使用QueryOver时,我试过:
DbSession.QueryOver<HaveListing>()
.Where(h => h.IsModerated == false)
.And(h => h.User.SpammedStatus == false)
Run Code Online (Sandbox Code Playgroud)
哪个失败了.但是,这有效:
DbSession.QueryOver<HaveListing>()
.Where(h => h.IsModerated == false)
.JoinQueryOver(h => h.User)
.Where(u => u.SpammedStatus == false)
Run Code Online (Sandbox Code Playgroud)
显然,使用后者是好的,但我想确保我没有遗漏某些东西 - 我的关系是在映射中定义的,所以我是否真的需要每次都指定连接以便在用户上执行WHERE?每次没有必要时包含这些连接将是一种浪费.
QueryOver不是LINQ.它使用表达式来指定属性名称,但在引擎盖下它是Criteria,所以它绑定到相同的规则(所有连接都是显式的)
除非您有令人信服的理由,否则请尝试以下方法:
DbSession.Query<HaveListing>()
.Where(h => h.IsModerated == false &&
h.User.SpammedStatus == false)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3249 次 |
| 最近记录: |