Fluent NHibernate Linq 复杂组件预加载

发布于 2024-11-19 23:41:33 字数 414 浏览 3 评论 0原文

我们在带有遗留数据库的项目中使用 Fluent NHibernate LINQ。 我们的场景是,我们有一个包含客户信息和地址的表。 我们在 C# 中将客户和地址创建为单独的实体。地址再次引用邮政编码对象。

在映射时,我们将地址映射为客户的组件。现在我想在获取客户时立即加载邮政编码(由地址引用)以避免 N+1 选择。

当我尝试编写 Fetch(customer => customer.Address.ZipCode) 时,它说它太复杂了。我无法执行 Fetch(customer => customer.Address).ThenFetch(address => address.ZipCode) 因为 Address 与 Customer 存储在同一个表中。

我有什么办法可以解决这个问题吗?

We are using Fluent NHibernate LINQ in our project with legacy database.
Our scenario is that we have a table with Customer information with address.
We have created Customer and Address as separate entities in C#. Address again references zip code object.

While mapping, we have mapped Address as Component of Customer. Now I want to eager load Zip Code (which is referenced by Address) while fetching Customer so as to avoid N+1 selects.

When I try to write Fetch(customer => customer.Address.ZipCode) it says its too complex. I cannot do Fetch(customer => customer.Address).ThenFetch(address => address.ZipCode) since Address is stored in same table as Customer.

Is there any way I can solve this problem?

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

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

发布评论

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

评论(1

拿命拼未来 2024-11-26 23:41:33

不幸的是,Linq 提供者似乎无法处理这种情况。因此,您要么使用条件或 QueryOver API

session.CreateCriteria<Customer>()
    .SetFetchMode("Address.ZipCode", FetchMode.Eager)
    .List();

session.QueryOver<Customer>()
    .Fetch(u => u.Address.ZipCode).Eager
    .List();

,要么在映射中禁用 ZipCode 的 LazyLoading

unfortunatly it seems the Linq-provider cant handle this situation. So either you use criteria or QueryOver API

session.CreateCriteria<Customer>()
    .SetFetchMode("Address.ZipCode", FetchMode.Eager)
    .List();

session.QueryOver<Customer>()
    .Fetch(u => u.Address.ZipCode).Eager
    .List();

Or disable LazyLoading of ZipCode in Mappings

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