我的问题很简单。我有以下代码,用户仍然插入。当我在SaveOrUpdate
之后(以及回滚之前)检查数据库时,我看到用户已经插入。这就像刷新模式和交易不起作用。我哪里错了?
using (var session = sessionFactory.OpenSession())
{
session.FlushMode = FlushMode.Never;
using (var tran = session.BeginTransaction())
{
var user = CreateUser();
session.SaveOrUpdate(user);
tran.Rollback();
}
}
答案 0 :(得分:1)
如果我们检查“仅在SaveOrUpdate
之后” ...我们仍在一个交易中。在最终决定(提交或回滚)之前可能会发生很多事情。
如果对象应为Created
或Updated
,其中一项操作将决定。因此,如果ID生成器设置为本机/标识(例如SQL服务器) - NHibernate必须执行INSERT才能获取ID。很多操作可以推迟,但要收到身份证 - 没有办法等待。
所以很可能你的ID需要从DB中获取..这就是INSERT发生的原因。 但其他内容不会写入数据库,直到调用Flush()
...所以,我不会将描述的行为标记为特殊内容。