我有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工作的例子?感谢任何建议。
答案 0 :(得分:-2)
您有两种选择:
Not.LazyLoad()
禁用提供延迟加载相关实体的可能性,并强制NHB在原始查询中提供相应的subselect
component mapping
,以便两个实体都指向同一个表。这是更好的方法,因为一旦您决定一起获取两个实体,生成的查询只会触及一个表 - 而不是像第一个选项中那样两个。这对性能来说肯定更好。