我做了很多例子来检查在从集合中添加或删除项目时何时重新创建行李集合。我在http://knol.google.com/k/nhibernate-chapter-16-improving-performance第16.5.1节中读到了这一点。分类:
袋子是最糟糕的情况。自从一个包 允许重复的元素值和 没有索引列,没有主键 可以定义。 NHibernate没有办法 区分重复 行。 NHibernate解决了这个问题 通过完全删除(在一个单一的 删除)并重新创建集合 每当它改变。这可能是 非常低效。
我做了一对一的双向(人 - >地址)和以下测试:
测试1:反向=假;行动=插入,更新,删除,计数;收集类型:套装,袋子
结果:集合表现完全相同!
测试2:反向=真;行动=插入,更新,删除,计数;收集类型:套装,袋子 结果:集合表现几乎相同!我只看到将新项目添加到行李集合中的区别 - 当我这样做时,集合中没有填充来自db的数据。
我使用nhibernate profiler / session statystics来分析会话对象和数据库中的更改。但是我没有看到任何重新创作的收藏品,是什么时候发生的呢?我记忆?
答案 0 :(得分:2)
重新创建集合仅适用于从数据库加载的实体。当在创建实体的同一会话中运行测试时,NHibernate知道集合是空的,在内存中操作它并在事务提交/会话刷新时仅将最终状态保存到数据库。
我已经完成了类似的测试 - 请参阅this blog entry,例如重新创建行李集合。