NHibernate 已删除的对象将通过级联重新保存

本文关键字:新保存 保存 级联 删除 对象 NHibernate | 更新日期: 2023-09-27 18:35:17

在我的解决方案中,我有一个带有关联的业务对象的分支。因此,当我尝试在处理后保存根对象时,我收到一条异常,并显示消息"删除的对象将通过级联重新保存"。这意味着删除对象后,它仍然存在于集合,其他关联等中。是否有人知道如何获取对已删除对象的引用列表。如果没有调试器支持,很难找到引用。

NHibernate 已删除的对象将通过级联重新保存

最常见的情况(我的经验)是有两个根对象,其中包含一些配对/中间对象的集合。

public class Employee 
{
    public virtual IList<Occupation> Occupations { get; set; }
}
public class Company
{
    public virtual IList<Occupation> Occupations { get; set; }
}

现在,我们有这样的Occupation

public class Occupation
{
    public virtual Employee Employee { get; set; }
    public virtual Company  Company  { get; set; }
}

那么,可能会发生什么:

  1. 我们从收藏夹中删除employee.Occupations职业
  2. 在该事务中,工作单元,我们也会拖拽并因此加载Company
  3. 公司启动。它的职业集合被加载。因此,对已删除职业的引用保留在那里
  4. NHibernate说: Deleted object would be re-saved by cascade

解决方案:

  • 确保公司永远不会加载(保持代理)
  • Remove()占领也来自company.Occupations
  • 不要在公司端使用这样的映射:

不要使用级联)

<bag name="Occupations" lazy="true" inverse="true" batch-size="25" 
     cascade="all-delete-orphan">
     // this above setting on Company side is making issues...
  <key column="Company_ID" />
  <one-to-many class="Occupation" />
</bag>

上述解决方案对我不起作用。我尝试删除的实例在我的代码中没有任何地方引用。

然而,它处于冬眠状态。清除会话后,它对我有用。