c# - 级联错误: deleted object would be re-saved by cascade

标签 c# nhibernate nhibernate-mapping cascade nhibernate-cascade

我有一个通过 NHibernate 实现并使用延迟加载的项目。 我在这个项目中有两个类(class):个人和家庭。 这两者之间的关系是聚合,是指一个人有一个人列表。 映射是:

  <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 提示的是你明确地告诉它删除 Family 的记录,然后当你重新保存 Person 时,Family 将被放回原处,因为 Person 仍然有一个引用它在其家庭列表中。

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

关于c# - 级联错误: deleted object would be re-saved by cascade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7954593/

相关文章:

c# - 在 HQL 查询中使用 nhibernate <loader> 元素

c# - 以编程方式在屏幕键盘上控制 Windows 7

c# - JSON.NET 序列化 - DefaultReferenceResolver 如何比较相等性?

c# - OnClientClick 正在停止回发

从 Angularjs 服务调用时,WebApi 中延迟加载的 nHibernate 对象出现 JsonSerializationException

asp.net-mvc - NHibernate 和上下文实体

nhibernate - 急切获取引用时重复(多对一)

c# - MVC 和 Entity Framework Html.DisplayNameFor 与复合 ViewModel

c# - Nhibernate 一对多关系错误

oop - NHibernate 无法解析继承属性的属性