首页 新闻 搜索 专区 学院

NHibernate级联删除问题

0
悬赏园豆:30 [已关闭问题] 关闭于 2011-12-07 18:17

有一个班级实体类Class(对应表T_Class)和学生实体类Student(对应表T_Student),我只在班级表中配置了单向的一对多关系,配置关系代码如下:

 <bag name="Students" cascade="all-delete-orphan" inverse="false">
      <key column="ClassId"/>
      <one-to-many class="Student"/>
    </bag>

在测试方法中调用如下代码

  Class cs = new Class() { ID = 1, Name = "1班" };
   Session.Delete(cs);
   Session.Flush();

删除班级表(T_Class)中编号为1的数据时,学生表(T_Student)中班级编号为1的记录不会被级联删除,只是把学生表中的班级编号置为了NULL。

通过Unit测试工具发现其生成的实际SQL代码为:

***** NHibernateSample.Test.ClassTest.DeleteClassTest
NHibernate: SELECT class_.ClassId, class_.ClassName as ClassName5_ FROM T_Class class_ WHERE class_.ClassId=@p0;@p0 = 1 [Type: Int32 (0)]
NHibernate: UPDATE T_Student SET ClassId = null WHERE ClassId = @p0;@p0 = 1 [Type: Int32 (0)]
NHibernate: Batch commands:
command 0:DELETE FROM T_Class WHERE ClassId = @p0;@p0 = 1 [Type: Int32 (0)]

请大侠们指教要怎样才能够把学生表中班级编号为1的记录也删掉!

猛士的主页 猛士 | 初学一级 | 园豆:8
提问于:2011-06-13 23:07
< >
分享
所有回答(3)
0

可以在程序中先删除外键表(学生表)班级为1的学生删除,然后再删除主键表(班级表)中的班级

王元勋 | 园豆:413 (菜鸟二级) | 2011-06-14 17:28
0

已解决。谢谢

猛士 | 园豆:8 (初学一级) | 2011-12-07 18:16
0

楼主,我现在正在学习NHibernate做相关项目,可否把一对多,多对一的级联删除 传个源码给我看看啊 谢谢了178467310@qq.com

gzhy | 园豆:205 (菜鸟二级) | 2012-03-11 19:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册