Nhibernate 之 一对多 级联删除
时间:2010-12-10 来源:0101010
从上面的图可以很清楚看上面关系一个客户可能有多个Order(表名改了,是为了证明mapping,做的测试)
2. 类设计 Customer
Order
3. Mapping
Customer.hbm.xml
图1
Order.hbm.xml
图2
到这里就是一个简单的一对多的代码。请看图1中的提示。cascade="all" inverse="true" cascade 表示表之间的层次,级联关系。在这里设置为all表示了。如过 customer表发生了表示(dml操作),那么它相互级联的表dml操作。 Inverse在这里翻译为反转。和上面的cascade有本质上的区别。为了证明区别我们看下面的2中情况:
情况1:Inverse设置false
order1表
customer表
执行下面的方法 我想达到的是级联删除
ConsoleApplication1.ceshi.deleteCustomerwithCriteria:
NHibernate.Exceptions.GenericADOException : could not delete collection: [bl.test.Customer.Orders#4][SQL: UPDATE Order1 SET Customer = null WHERE Customer = @p0]
----> System.Data.SqlClient.SqlException : 不能将值 NULL 插入列 'Customer',表 'NHibernate.dbo.Order1';列不允许有空值。UPDATE 失败。
语句已终止。
报错!!!!!
为什么了?? 用NHProf查查:
前面2个是select 没问题。错就错在update
情况2 Inverse设置True
多么舒服的绿色啊!!!
分析一下:
多了很多啊。看见没!! 先删除关联表里面的信息,然后再在删除主表。
相关阅读 更多 +