我的问题很简单。我有下面的代码,并且用户仍然被插入。当我在 SaveOrUpdate 之后(以及回滚之前)检查数据库时,我看到用户已经插入。这就像刷新模式和事务不起作用。我哪里出错了?
using (var session = sessionFactory.OpenSession())
{
session.FlushMode = FlushMode.Never;
using (var tran = session.BeginTransaction())
{
var user = CreateUser();
session.SaveOrUpdate(user);
tran.Rollback();
}
}
最佳答案
如果我们检查“就在SaveOrUpdate
之后”...我们仍然处于一笔交易中。在最终决定(提交或回滚)之前可能会发生很多事情。
其中一项操作是决定对象应该创建
还是更新
。因此,如果 ID 生成器设置为 native/identity(例如 SQL Server),NHibernate 必须执行 INSERT 来获取 ID。很多操作可以推迟,但要收到 ID - 没有办法等待。
所以很可能您的 ID 需要从数据库获取.. 这就是发生 INSERT 的原因。 但是其他东西不会被写入数据库,直到Flush()
被调用......所以,我不会将描述的行为标记为特殊的东西。
关于c# - NHibernate回滚似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452752/