c# – 级联错误:被删除的对象将被级联重新保存
发布时间:2020-12-15 03:59:32 所属栏目:百科 来源:网络整理
导读:我有一个项目由NHibernate实现和使用Lazy加载. 我在这个项目中有两个班:人与家庭. 这两者之间的关系是聚合,意思是Person有一个Person列表. 地图是: class name="Person" table="Person_Person" id name="Id" type="Int64" unsaved-value="0" generator cla
我有一个项目由NHibernate实现和使用Lazy加载.
我在这个项目中有两个班:人与家庭. 这两者之间的关系是聚合,意思是Person有一个Person列表. 地图是: <class name="Person" table="Person_Person" > <id name="Id" type="Int64" unsaved-value="0"> <generator class="native" /> </id> <bag name="Families" inverse="true" table="Person_Family" cascade="all-delete-orphan" > <key column="Person_id_fk"/> <one-to-many class="Domain.Entities.Family,Domain.Entities"/> </bag> </class> 在这个项目中,我通过ID获取一个人,然后删除一个家庭的家人. Person person = SessionInstance.Get<Person>(id); foreach (Family fam in person.Families) if (fam.Name == "Jaun") SessionInstance.Delete(fam); 家庭没有删除,因为这个消息抛出异常: 我如何删除一个人的家庭? 解决方法
基本上NHibernate所抱怨的是,你明确地告诉它删除家庭的记录,然后当你重新保存个人时,家庭将被放回原位,因为该人还在其中引用了家庭清单
相反,NHibernate告诉您以面向对象的方式处理这种关系,NHibernate允许您使用它.只需从Person.Family列表中删除对“Jaun”家族的引用,然后保留Person.当您这样做时,NHibernate将删除该家族与该人员之间的关系.如果“家庭”现在不再被其他任何参考,因为您将“级联”属性设置为“全删除孤儿”,“Jaun”族记录将从数据库中完全删除. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |