我有两个实体Password和PasswordHash。密码包含一组PasswordHashes(这些是具有不同掩码的哈希)。NHibernate使用Cascade进行删除操作导致N + 1删除
当我删除密码时,我希望所有关联的密码哈希也被删除。
我不喜欢这样的映射:
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删除的代码吗? – mickfold 2013-03-21 10:18:37
我想这个,你用来执行删除的代码,可能是有趣的:http://www.nhforge.org/doc/nh/en/index.html#performance-collections-oneshotdelete – jbl 2013-03-21 12:29:33
删除HQL儿童(第一次旅行),然后删除父母?您还使用哪个数据库供应商? – Rippo 2013-03-21 14:52:13