【发布时间】:2013-03-21 10:08:06
【问题描述】:
我有两个实体 Password 和 PasswordHash。 Password 有一组 PasswordHashes(这些是具有不同掩码的哈希)。
当我删除密码时,我希望所有相关的 PasswordHash 也被删除。
我做了这样的映射:
mapping.HasMany(x => x.PasswordHashes)
.Cascade
.All()
.Inverse()
.ReferencedBy(x => x.Password);
我预计会生成两个查询:
DELETE FROM "PasswordHash" WHERE "IdPassword" = :p0
很明显
DELETE FROM "Password" WHERE "IdPassword" = :p0
NHibernate 生成 N+1 个查询,如下所示:
DELETE FROM "PasswordHash" WHERE "IdPasswordHash" = :p0 (N)
和
DELETE FROM "Password" WHERE "IdPassword" = :p0 (1)
如何将此行为更改为更优化?
编辑:删除代码:
session.Delete(password);
session.Flush();
【问题讨论】:
-
你能给出导致 N+1 删除的代码吗?
-
我猜这个,你用来执行删除的代码,可能会感兴趣:nhforge.org/doc/nh/en/…
-
使用 HQL 删除子项(第一次),然后删除父项?您还使用哪个数据库供应商?
-
BTW ReferencedBy 是什么(抱歉有任何愚蠢的问题)?当它为 PropertyRef 改变时,它会改变什么吗?
-
对不起,我忘了这是我们的扩展方法。它只是将 KeyColumn 设置为适当的值。
标签: nhibernate