在我的解决方案中,我有一个具有关联的业务对象分支。因此,当我在处理后尝试保 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; }
}
那么,可能会发生什么:
- 我们从
employee.Occupations
集合中删除一个Occupation。 - 在那个事务中,工作单元,我们也 tuch 并因此加载
Company
- 公司成立。它的职业集合被加载。所以对已删除的职业的引用保留在那里
- 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/