NHibernate 已删除的对象将通过级联重新保存
本文关键字:新保存 保存 级联 删除 对象 NHibernate | 更新日期: 2023-09-27 18:35:17
在我的解决方案中,我有一个带有关联的业务对象的分支。因此,当我尝试在处理后保存根对象时,我收到一条异常,并显示消息"删除的对象将通过级联重新保存"。这意味着删除对象后,它仍然存在于集合,其他关联等中。是否有人知道如何获取对已删除对象的引用列表。如果没有调试器支持,很难找到引用。
最常见的情况(我的经验)是有两个根对象,其中包含一些配对/中间对象的集合。
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; }
}
那么,可能会发生什么:
- 我们从收藏夹中删除
employee.Occupations
职业。 - 在该事务中,工作单元,我们也会拖拽并因此加载
Company
- 公司启动。它的职业集合被加载。因此,对已删除职业的引用保留在那里
- 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>
上述解决方案对我不起作用。我尝试删除的实例在我的代码中没有任何地方引用。
然而,它处于冬眠状态。清除会话后,它对我有用。