Transaction.Commit保存在BeginTransaction之前所做的更改

时间:2012-01-30 11:07:43

标签: nhibernate transactions

避免意外更改的最佳方法是什么?

var a = session.Load<A>(id);
a.Value = ParseExpressions(a.Value);

using(var tx = session.BeginTransaction())
{
  // Do some work here
  tx.Commit();
}

A对象包含需要在完成工作之前进行评估的表达式,但是当提交事务时a.Value将保存到数据库中。

我只想保存在 session.BeginTransaction()之后发生的更改。

我尝试过调用session.Clear(),但这会导致保存带有Guid ID的实体而不是更新。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

不是100%确定我没记错,但您应该能够将session.FlushMode设置为never,并明确保存您要保存的更改。

答案 1 :(得分:0)

您可以使用事件系统跳过保存特定实体,但是您遇到了麻烦。

您还可以Evict()会话中的特定实体。

经验法则是:如果您不想将更改保存到实体,不要修改实体。调用commit时,所有更改都必须准备就绪。