Fetch.Join() 在 Fluent NHibernate 中不起作用

发布于 2024-11-15 17:48:26 字数 918 浏览 2 评论 0原文

我在关系的一侧有以下映射覆盖:

public void Override(AutoMapping<ItemAsmtDetailDh> mapping)
{
    mapping.HasMany<WAsmtDetail>(x => x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(Prefix.Underscore).Not.LazyLoad().Fetch.Join();
}

在关系的另一侧我有:

public void Override(AutoMapping<WAsmtDetail> mapping)
{
    mapping.References<ItemAsmtDetailDh>(x => x.ItemAsmtDetailDh).Not.Nullable().Not.LazyLoad().Fetch.Join();
}

当我使用 ShowSql 选项时,我看到它仍在为 WAsmtDetails 发出单独的选择语句,给我可怕的“n + 1”选择”问题。为什么“.Not.LazyLoad().Fetch.Join()”被忽略?

注意:我使用的是 Fluent NHibernate 1.1 版,不是 2.1 版,因为较新版本中存在错误。 (请参阅我的答案这个问题以获取错误详细信息。)我正在使用 NHibernate 版本 2.1.2.4000。

I have the following mapping override on one side of the relationship:

public void Override(AutoMapping<ItemAsmtDetailDh> mapping)
{
    mapping.HasMany<WAsmtDetail>(x => x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(Prefix.Underscore).Not.LazyLoad().Fetch.Join();
}

and on the other side of the relationship I have:

public void Override(AutoMapping<WAsmtDetail> mapping)
{
    mapping.References<ItemAsmtDetailDh>(x => x.ItemAsmtDetailDh).Not.Nullable().Not.LazyLoad().Fetch.Join();
}

When I use the ShowSql option I see that it's still issuing separate select statements for the WAsmtDetails giving me the dreaded "n + 1 selects" problem. Why is ".Not.LazyLoad().Fetch.Join()" being ignored?

Note: I'm using Fluent NHibernate version 1.1, not version 2.1, because of a bug in the newer version. (See my answer for this question for bug details.) I'm using NHibernate version 2.1.2.4000.

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

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

发布评论

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

评论(1

不顾 2024-11-22 17:48:26

您很可能以不受映射中的 Fetch.Join() 影响的方式加载数据(例如 HQL 或 Linq)。来自 NHibernate 文档:

映射文档中定义的获取策略会影响:

  • 通过 Get() 或 Load() 检索
  • 导航关联时隐式进行的检索
  • ICriteria 查询
  • 如果使用子选择获取,则进行 HQL 查询

You are most likely loading the data in a way that isn't affected by Fetch.Join() in the mapping (like HQL or Linq). From the NHibernate documentation:

The fetch strategy defined in the mapping document affects:

  • retrieval via Get() or Load()
  • retrieval that happens implicitly when an association is navigated
  • ICriteria queries
  • HQL queries if subselect fetching is used
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文