NHibernate级联问题

时间:2009-02-25 00:04:56

标签: nhibernate hibernate nhibernate-mapping

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

映射如下:

父级:日历

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

Child:DefaultCatergory

<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为你照顾这个? 任何帮助或指示非常感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

你在做什么应该工作。