gpt4 book ai didi

c# - NHibernate Deleted 对象将被级联重新保存

转载 作者:太空狗 更新时间:2023-10-29 22:58:30 25 4
gpt4 key购买 nike

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

最佳答案

最常见的场景(我的经验)是有两个根对象具有一些配对/中间对象的集合。

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

现在,我们有这样的职业

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

那么,可能会发生什么:

  1. 我们从 employee.Occupations 集合中删除一个Occupation
  2. 在那个事务中,工作单元,我们也 tuch 并因此加载 Company
  3. 公司成立。它的职业集合被加载。所以对已删除的职业的引用保留在那里
  4. NHibernate 说:删除的对象将被级联重新保存

解决方案:

  • 确保公司永远不会加载(作为代理)
  • Remove() Occupation 也来自 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>

关于c# - NHibernate Deleted 对象将被级联重新保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27640560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com