2009-02-25 61 views
1

您好我在更新子对象在以下方案中有问题。NHibenate级联问题

的映射如下:

家长:日历

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

儿童: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; 
    } 

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

您是否认为我需要通过parentID删除所有defaultCatergories然后重新创建? 我以为NHibernate为您照顾这件事吗? 任何帮助或指针非常感谢。

回答

1

我不知道如果NHibernate不承认日历作为现有的实例。看看this section的文档,看看是否添加一个未保存的属性到你的映射有帮助。

+0

谢谢。我只是看着它,并遵循使用saveUpdate的建议。但是,仍然是同样的问题。那就是说,我有3个子对象,删除2并更新。我仍然会在db中结束3。嗯,回到绘图板。 – user17510 2009-02-25 10:14:06

1

是您的默认flushmode OnCommit?如果不是这种情况,那么可能会在提交之前刷新会话来解决问题。

你在做什么应该工作。