NHibernate Deleted对象将通过级联重新保存

时间:2014-12-24 17:47:14

标签: c# nhibernate

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

2 个答案:

答案 0 :(得分:6)

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

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
  5. 解决方案:

    • 确保公司永远不会被加载(作为代理人)
    • 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>
    

答案 1 :(得分:0)

以上解决方案对我不起作用。我试图删除的实例在我的代码中没有引用。

然而,它是在NHhibernate。清除会话后,它对我有用。

相关问题