如何使用nHibernate Fluent映射映射HasOne关系并避免N + 1?

时间:2013-09-03 21:54:06

标签: nhibernate fluent-nhibernate

我有2个表 ATable AATable ,其中两个表都有共享主键 - ATable.aKey AATable.aKey < / strong>代表一对一的关系。对于我的Fluent映射,我在我的Fluent ATableMapping中定义了一个HasOne关系,所有这些都可以正常工作。但是我注意到查询 ATable 会为子表 AATable 生成第二个查询(N + 1)。我的理解是,默认情况下Hasone急切加载,我认为这将是ATable查询的一部分,但我可能有这个错误?

我研究了各种解决方案,包括使用.Not.LazyLoad()。Fetch.Join(),PropertyRef,ForeignKey但我似乎无法解析n + 1,因此要么是Eager加载了1个查询,要么是Lazy加载我可以用我的疑问来接孩子。

有没有人对此有任何疑问或有一个他们知道没有n + 1工作的例子?感谢任何建议。

1 个答案:

答案 0 :(得分:-2)

您有两种选择:

  1. Not.LazyLoad()禁用提供延迟加载相关实体的可能性,并强制NHB在原始查询中提供相应的subselect
  2. 使用component mapping,以便两个实体都指向同一个表。这是更好的方法,因为一旦您决定一起获取两个实体,生成的查询只会触及一个表 - 而不是像第一个选项中那样两个。这对性能来说肯定更好。