Nhibernate高效级联删除

Nhibernate高效级联删除,nhibernate,sql-delete,nhibernate-cascade,Nhibernate,Sql Delete,Nhibernate Cascade,在具有nHibernate的删除上下文上,当删除具有子集合的父对象时 我想知道为什么Nhibernate会逐行删除儿童(关于儿童PK) 为什么nhibernate做不到 DELETE FROM children where parentId=1 DELETE FROM parent where id=1 例如,如果父母有10万个孩子,这将更有效率。 我搜索了很多主题,但没有找到正确的答案。我也做了一些测试,但没有成功 一个想法?在这种情况下,我们可以使用NHibernate扩展点。医生 NHi

在具有nHibernate的删除上下文上,当删除具有子集合的父对象时 我想知道为什么Nhibernate会逐行删除儿童(关于儿童PK)

为什么nhibernate做不到

DELETE FROM children where parentId=1
DELETE FROM parent where id=1
例如,如果父母有10万个孩子,这将更有效率。 我搜索了很多主题,但没有找到正确的答案。我也做了一些测试,但没有成功
一个想法?

在这种情况下,我们可以使用NHibernate扩展点。医生

NHibernate可以使用定制的SQL语句来创建、更新和修改SQL语句 删除操作。NHibernate中的类和集合持久化器 已包含一组配置时生成的字符串 (插入SQL、删除SQL、更新SQL等)。映射标记
覆盖这些字符串:

<class name="Person">
    <id name="id">
        <generator class="increment"/>
    </id>
    <property name="name" not-null="true"/>
    <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>
    <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>
    <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>
</class>

插入个人(姓名、ID)值(上限(?,?)
更新人员集名称=上限(?),其中ID=?
从ID=?
所以,如果标准删除没有用,我们可以提供自己的过程,包括一些存储过程

<sql-delete>exec deletePerson ?</sql-delete>
执行删除人?
总之,在大多数情况下,标准模型是有效的。如果我们需要改进SQL。。我们可以…

我看到了这个解决方案,但它打破了逻辑域模型。如果在删除实体之前有一些逻辑,可能需要在StoredProcess中复制它。卡萨德也有同样的问题;在这种情况下,您需要在数据库上定义您的级联(因此我们现在在两个位置有casdade定义..hbm和database),它只是一个扩展点。。您可以在此处添加删除逻辑。。如果你想优化。。但是你可以使用其他地方。。。e、 你可以引入事件监听器(勾选这里)并用C#钩住delete。。。关键是-基本的删除是存在的,有效的,也许不是最有效的。。您确实有一些地方可以覆盖默认值。。希望能有点帮助;)实际上,我将StoredProcess与HQL一起使用。我没有选择的余地,因为如果我让nhibernate做他自己的事情,它就会超时。我想了解为什么nhibernate不能正确地(或更有效地)管理它
<sql-delete>exec deletePerson ?</sql-delete>