有一个班级实体类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的记录也删掉!
可以在程序中先删除外键表(学生表)班级为1的学生删除,然后再删除主键表(班级表)中的班级
已解决。谢谢