3 回答
TA贡献1856条经验 获得超5个赞
我会说,这是我们应该期待的行为。让我们来一个场景,在系统中我们有2个用户和2个角色
User1 - Role1 // has only Role1
User2 - Role1 // now we see that Role2 has more then User1
User2 - Role2
假设第一个查询将仅检索User1及其多对多关系Role1。我们必须在ISession此刻只有用户1,所以设置用户的role1上是不完整的 (我们不能重用的对象装入的Isession的时刻)。但是人们怎么知道我们在哪里呢?Role1是否为会话加载了所有数据?
Role1必须发出新查询,并为其加载数据。这样,我们最终可以得到这些查询的信息。
我认为最好的解决方案(几乎在所有情况下都在使用它)是batch-size设置:19.1.5。使用批量提取
HasManyToMany(x => x.UsersInRole)
...
.BatchSize(25)
标记您所有的收藏地图.BatchSize(25),甚至对Class地图也这样做。这将导致多于1个SQL脚本,但最后取决于批处理大小和页面大小,最多不会超过1 +(2-4)。
TA贡献1847条经验 获得超11个赞
尝试了您的建议。结果是1 + 12个查询-比以前要好很多,但是不是有办法使它少于12个吗?(增加批量大小?)-批量大小的成本是多少?我会怀疑,如果一切都很好,它将默认设置为。批量大小是唯一的解决方案吗?是否存在可能导致2个查询的联接?如果我需要用简单的SQL编写自己的代码,我认为2条查询就足够了。谢谢。
- 3 回答
- 0 关注
- 541 浏览
添加回答
举报