gpt4 book ai didi

Nhibernate QueryOver - 为什么我必须指定 JoinQueryOver

转载 作者:行者123 更新时间:2023-12-03 12:00:47 25 4
gpt4 key购买 nike

在我的 NHibernate 映射中,我有两个对象 - 列表和用户。一个用户可以有多个列表,并且(Fluent)映射设置如下:

list :

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)

显然,使用后者很好,但我想确保我没有遗漏一些东西——我的关系是在映射中定义的,所以我真的需要每次都指定连接以便对用户执行 WHERE 吗?每次不需要时都包含这些连接将是一种浪费。

最佳答案

QueryOver 不是 LINQ。它使用表达式来指定属性名称,但在底层它是标准,因此它绑定(bind)到相同的规则(所有连接都是显式的)

除非您有令人信服的理由不这样做,否则请尝试以下方法:

DbSession.Query<HaveListing>()
.Where(h => h.IsModerated == false &&
h.User.SpammedStatus == false)

关于Nhibernate QueryOver - 为什么我必须指定 JoinQueryOver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5020118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com