c# – 级联错误:被删除的对象将被级联重新保存

前端之家收集整理的这篇文章主要介绍了c# – 级联错误:被删除的对象将被级联重新保存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个项目由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);

家庭没有删除,因为这个消息抛出异常:
删除的对象将被级联重新保存(从关联中删除删除的对象)[Domain.Entities.Family#167]

我如何删除一个人的家庭?

解决方法

基本上NHibernate所抱怨的是,你明确地告诉它删除家庭的记录,然后当你重新保存个人时,家庭将被放回原位,因为该人还在其中引用了家庭清单

相反,NHibernate告诉您以面向对象的方式处理这种关系,NHibernate允许您使用它.只需从Person.Family列表中删除对“Jaun”家族的引用,然后保留Person.当您这样做时,NHibernate将删除该家族与该人员之间的关系.如果“家庭”现在不再被其他任何参考,因为您将“级联”属性设置为“全删除孤儿”,“Jaun”族记录将从数据库中完全删除.

猜你在找的C#相关文章