加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读