使用 nhibernate LINQ 语法时,为什么单个连接查询会运行两次?

发布于 2024-10-09 19:02:03 字数 334 浏览 0 评论 0原文

我刚刚迁移到 nhibernate 3 并使用 LINQ 语法。我现在有以下代码:

IEnumerable<Team> team = Session.Query<Team>().Fetch(r=>r.Country);

所以它将执行预先连接(因为我需要为每个记录使用这些子对象。

它正在运行连接查询,但我在 nhibernate 探查器中将其拉出,结果发现它运行了两次查询(同样的查询)。

这是新版本的 nhibernate 中的错误还是我做错了什么?

另外,有什么建议可以调试它以了解为什么会发生这种情况。

i just migrated to nhibernate 3 and an using the LINQ syntax. I now have the following code:

IEnumerable<Team> team = Session.Query<Team>().Fetch(r=>r.Country);

so it will do an upfront join (as i need these child objects for each record.

It is running the join query but I pulled this up in the nhibernate profiler and it turns out that its running the query twice (same exact query).

Is this a bug in the new version of nhibernate or is there something that I am doing wrong?

Also, any suggestions for additional ways to debug this to understand why this is happening.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

会傲 2024-10-16 19:02:03

它与 Fetch 或 join 无关。

您正在为团队分配一个IQueryable。因此,每次枚举它(迭代、获取计数等)时,它都会执行查询。

为了避免这种情况,请将 .ToList() 附加到调用中,以便执行该调用并将其转换为内存中列表。

It has nothing to do with Fetch or joins.

You are assigning an IQueryable to team. Therefore, each time you enumerate it (iterate, get count, etc), it is executing the query.

To avoid this, append .ToList() to the call, so it's executed and converted to an in-memory list.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文