【发布时间】:2015-03-12 18:14:21
【问题描述】:
在 nhibernate 中执行 Select 时,我认为 Rollback 比 Commit 更快,因为 NHibernate 和 Oracle 都不需要检查是否有任何更新。
但我发现的所有示例在选择后都会执行提交。
而如果我使用隐式事务,框架会执行回滚。
我的问题是关于速度和资源使用,而不是关于架构或编码风格。
( 现在写 nhibernate 的人比我更了解 nhibernate 的内部结构,他们选择仅使用 Select 对隐式事务进行回滚。这可能与我完全不同的原因(不提交必须导致回滚是一个可能的原因)。)
( 还有一个架构/心理学争论围绕在未来可能的编辑中应该发生的事情,其中有人决定在同一代码中调用更新。开发人员是否应该对回滚感到惊讶,或者错误放置的更新是否应该让用户感到惊讶提交?此讨论不是主要问题的一部分。)
using (var session = Helper.SessionFactory.OpenSession())
{
using (var tran = session.BeginTransaction())
{
var ret = session.Query<Person>().Where(x => x.Id == id).Single();
tran.Rollback(); // <----- or commit?
return ret;
}
}
或者我应该打电话
tran.Commit();
?
【问题讨论】:
-
如果只执行一次选择,为什么还需要使用事务?
-
比我知识渊博得多的人suggests它。抵抗是徒劳的 - 会有交易。
标签: c# oracle nhibernate transactions