文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Nhibernate 之 一对多 级联删除

Nhibernate 之 一对多 级联删除

时间:2010-12-10  来源:0101010


从上面的图可以很清楚看上面关系一个客户可能有多个Order(表名改了,是为了证明mapping,做的测试)
2. 类设计 Customer public class Customer { public Customer() { } public virtual int CustomerId { get; set; } public virtual string Firstname { get; set; } public virtual string Lastname { get; set; } public virtual int Version { get; set; } //版本说明 public virtual ISet<Order> Orders { get; set; } }
Orderpublic class Order { public virtual int OrderId { get; set; } public virtual DateTime OrderDate { get; set; } public virtual int Customer { get; set; } public virtual Customer Customerone { get; set; } }
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

多么舒服的绿色啊!!!
分析一下:

多了很多啊。看见没!! 先删除关联表里面的信息,然后再在删除主表。

 

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载