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

标签 c# nhibernate

在我的解决方案中,我有一个具有关联的业务对象分支。因此,当我在处理后尝试保 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/

相关文章:

C# 类更改事件导致对象引用未设置为对象的实例

c# - 虚方法的重载解析

nhibernate - 如何在 NHibernate 中使用序列作为 ID 的默认值?

sql - 如何使用 NHibernate 构建字符串查询?

c# - 角色授权抛出 "The trust relationship between this workstation and the primary domain failed"

c# - 为多个实例保存 PlayerPrefs

c# - 如何使用 Dapper-dot-net 从单个 SP 映射多个记录

nhibernate - Kendo网格服务器端分组

nhibernate - 在哪里下载 NHibernate CaSTLe 工具?

c# - nhibernate 如何在后台处理 ver 列的更新冲突?