Fetch.Join() 在 Fluent NHibernate 中不起作用
我在关系的一侧有以下映射覆盖:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您很可能以不受映射中的
Fetch.Join()
影响的方式加载数据(例如 HQL 或 Linq)。来自 NHibernate 文档: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: