gpt4 book ai didi

.net - NHibernate:无法成功预加载

转载 作者:行者123 更新时间:2023-12-04 08:46:13 24 4
gpt4 key购买 nike

我正在使用用 NH3 重新编译的 NH 3.0 和 FNH 1.1。

我有一个用户模型,我想在加载它时始终检索其配置文件。我使用 NH3 的 linq 提供程序,但不能使用它的 Fetch 方法(因为我的存储库隐藏了 NHibernate 并返回一个 IQueryable 以及在查询中调用 ToPagedList 的事实,因此阻止我将 Fetch 作为查询的最后一次调用)。

在 UserMap 我设置:

HasOne(x => x.Profile)
.Not.LazyLoad()
.Cascade.All();

但是将 LazyLoad 设置为 OFF 并没有帮助。我也玩过获取模式。

我的期望是,如果我定义了这个映射,那么我什至不必告诉 Linq 我希望在请求 User 实体时获取 Profile。 Linq 应该尊重映射,不是吗?

最佳答案

我也有这个问题,不幸的是我认为这是设计使然。 NHibernate 3.0 Linq 提供程序在幕后使用 HQL,而 HQL 在这方面不支持您的映射。例如,如果你做了

session.CreateQuery("from Profile").List()



您只会获得所有配置文件的列表,即使您的映射具有外连接=真,您的用户类也不会加入。

如果您使用的是使用 Critera API 或直接使用 Criteria API 的旧 NHibernate.Linq 提供程序:

session.CreateCriteria().List()



正如您的映射文件所要求的那样,您将获得与用户外部连接的所有配置文件的列表。

现在我不知道为什么 HQL 支持的 linq 提供程序不尊重您的映射(如果有人知道解决此问题的方法,请发布),但我相信这就是您看到这种行为的原因。

关于.net - NHibernate:无法成功预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380335/

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