如何强制NHibernate 3.1在Session.Merge之后但在刷新之前检测集合修改

时间:2011-12-13 17:52:41

标签: c# .net nhibernate

假设我有以下型号:

class Post
{
  ICollection<Comment> Comments { get; set; }
}

class Comment
{
  Post Post { get; set;}
}

我有一个现有的post,我在其中添加了新的comment。由于某种原因(太长而无法进入),我在那时打电话给Session.Merge(post),但我还没有答应。然后,我清除post.Comments,因为其他一些代码决定不需要它,并添加另一个新的Comment。然后我再次致电Session.Merge(post)

我看到的行为是向数据库发出了两个INSERT,因为添加了两个注释(即使我清除了中间的集合)。但是对象实例并没有反映这一点;合并之后,post.Comments.Count为1.如果我调用Session.Clear()并按id重新加载帖子,我会看到两条真实反映数据库中发生的事情的评论。

问题是,它没有反映出我想要的东西。我只需要一个评论(在这个例子中)。

我相信这种情况正在发生,因为在已经合并到会话之后,我正在清除Comments集合,然后在再次合并之前修改它,然后提交事务。因此会话的ActionQueue已经为第一条评论列出了插入内容。 当我清除集合时,我原本希望将此操作从队列中删除,但事实并非如此。

为了确认这一点,我尝试发出一个Session.Delete(eachComment),然后调用post.Comments.Clear()给我留下了预期的总共1条评论,但仍然发出了一个INSERT,紧接着是一个DELETE到数据库。

我可以让NHibernate的会话检测到一个集合在提交之前被清除并被替换了吗?

0 个答案:

没有答案