【问题标题】:NHibenate cascade problemNHibernate级联问题
【发布时间】:2009-02-25 00:04:56
【问题描述】:

您好,我在以下情况下更新子对象时遇到问题。

映射如下:

父级:日历

  <bag name="defaultCategories"  inverse="true" lazy="false" 
    cascade="all-delete-orphan">
  <key column="parentID" />
  <one-to-many class="DefaultCategory"/>
  </bag>

子项:默认类别

<class name="DefaultCategory" table="tb_calendar_default_category" lazy="false">

<id name="id" column="id">
  <generator class="hilo"/>
</id>

<many-to-one name="calendar" column="parentID" not-null="true" 
 cascade="all-delete-orphan" />

用于更新日历的代码:

public Calendar Update(Calendar vo)
    {
        session = NHibernateHelper.GetCurrentSession();

        tx = session.BeginTransaction();
        using (tx)
        {

            session.Update(vo);

            tx.Commit();
        }

        return vo;
    }

问题是,当我通过 ui 添加或删除 defaultCategories 并将日历的更新版本发送回后端时,NHibernate 会返回更新的日历,一切看起来都很好。但是,任何应该被删除的 defaultCatergories 都保留在默认的 Categories 表中。因此,当我刷新 ui 并再次调用日历时,我可以看到集合没有改变。

您认为我需要按 parentID 删除所有 defaultCatergories 然后重新创建吗? 我的印象是 NHibernate 会为你解决这个问题? 非常感谢任何帮助或指示。

【问题讨论】:

    标签: nhibernate hibernate nhibernate-mapping


    【解决方案1】:

    我想知道 NHibernate 是否没有将日历识别为现有实例。查看this section 的文档,看看在映射中添加 unsaved-value 属性是否有帮助。

    【讨论】:

    • 谢谢。我只是看了看,并遵循了使用 saveUpdate 的建议。但是,仍然是同样的问题。也就是说,假设我有 3 个子对象,删除 2 个并更新。我仍然会在数据库中得到 3。嗯回到绘图板。
    【解决方案2】:

    您的默认刷新模式是 OnCommit 吗?如果不是这种情况,则可能在提交之前刷新会话将解决问题。

    你正在做的应该有效。

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多