在使用nHibernate的删除上下文中,删除带有子集合的父级时 我想知道为什么Nhibernate逐行删除孩子(在孩子PK上)
DELETE FROM children where Id=1
DELETE FROM children where Id=2
...
DELETE FROM parent where id=1
为什么nhibernate无法做
DELETE FROM children where parentId=1
DELETE FROM parent where id=1
例如,如果父母有10万个孩子,这将更有效率。 我在许多主题中搜索而找不到正确的答案。我也做了一些测试,但是没有成功 一个主意吗?
答案 0 :(得分:1)
在这种情况下,我们可以使用NHibernate可扩展性点。文档
NHibernate可以使用自定义SQL语句来创建,更新和 删除操作。 NHibernate中的类和集合持久性 已经包含一组配置时间生成的字符串 (insertsql,deletesql,updatesql等)。映射标签
<sql-insert>
,<sql-delete>
和<sql-update>
覆盖以下字符串:<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>
因此,如果标准删除没有用,我们可以提供我们自己的过程,包括一些存储过程
<sql-delete>exec deletePerson ?</sql-delete>
总而言之,在大多数情况下,标准模型已经足够有效且有效。如果我们需要改进SQL ..我们可以...