2

我有 2 个表ATableAATable,它们都有一个共享的主键 - ATable.aKeyAATable.aKey来表示一对一的关系。对于我的 Fluent 映射,我在 Fluent ATableMapping 中定义了一个 HasOne 关系,所有这些都可以正常工作。但是我注意到查询ATable 会为子表 AATable生成第二个查询(N+1)。我的理解是默认情况下 Hasone 渴望加载,我曾假设这将是 ATable 查询的一部分,但我很可能有这个错误?

我研究了各种解决方案,包括使用 .Not.LazyLoad().Fetch.Join()、PropertyRef、ForeignKey 但我似乎无法解析 n+1 以便它是急切加载 1 个查询,或者是延迟加载,我可以用我的查询来取孩子。

有没有人对此有任何问题,或者有一个他们知道在没有 n+1 的情况下工作的例子?感谢任何建议。

4

1 回答 1

-2

你有两个选择:

  1. Not.LazyLoad()这禁用了提供延迟加载的相关实体的可能性,它将强制 NHBsubselect在原始查询中提供相应的
  2. 使用component mapping这样两个实体都指向同一个表。这是更好的方法,因为一旦您决定将两个实体一起获取,生成的查询只会命中一个表 - 而不是第一个选项中的两个。这对性能肯定更好。
于 2013-09-04T06:12:05.457 回答