nhibernate - 删除父子的最有效方法?

时间:2010-06-03 10:45:39

标签: nhibernate

我已经使用cascade =“all-delete-orphan”映射了子集合并尝试了

var parent = session.Load<Parent>(id);
session.Delete(parent);

但它还会在删除之前加载父级及其所有子级。 有没有办法删除父项和子项而不加载它们或至少只加载父项?

2 个答案:

答案 0 :(得分:1)

我不是NHibernate的专家,我仍然非常了解它。我有待纠正,但默认情况下没有NHibernate延迟加载,即Parent.Child只会在访问时初始化(并加载数据)。

删除Parent时,使用all-delete-orphan设置的关系模型意味着在删除Parent时必须先删除与Parent相关的Child成员。这可以解释为什么他们被装载。

如果您出于性能原因试图避免加载Children,可能会为此特殊情况实现自己的SQL。

答案 1 :(得分:0)

这很简单,只需在数据库上使用级联删除即可。如果这不是使用在数据库级别上运行的自定义查询的选项,或者只是使用此方法。

NHibernate无法通过查询来执行此操作,它需要检索每个单独的行以进行删除,因为它需要行的键来删除它们。这就是使这个变得昂贵的原因。

只需在数据库上使用级联删除即可。这是数据库擅长的东西。

相关问题