gpt4 book ai didi

nhibernate - 使用 NHibernate 和事务,我是在提交失败时回滚还是在单次提交时自动回滚?

转载 作者:行者123 更新时间:2023-12-04 15:28:15 26 4
gpt4 key购买 nike

我为我的工作单元构建了以下 Dispose 方法,它基本上包装了事件的 NH session 和事务(在打开 session 后事务设置为变量,如果 NH session 在错误后获得新事务,则不会被替换)

 public void Dispose()
{
Func<ITransaction,bool> transactionStateOkayFunc =
trans => trans != null && trans.IsActive && !trans.WasRolledBack;

try {
if(transactionStateOkayFunc(this.transaction))
{
if (HasErrored)
{
transaction.Rollback();
}
else
{
try
{
transaction.Commit();
} catch (Exception)
{
if(transactionStateOkayFunc(transaction)) transaction.Rollback();
throw;
}
}
}
} finally
{
if(transaction != null) transaction.Dispose();
if(session.IsOpen) session.Close();
}

不禁觉得代码有点臃肿,在非嵌套事务的情况下,一个事务会不会自动回滚离散的Commit失败?

Commit 或 Rollback 会自动处理事务吗?如果不是 Session.Close() 会自动处理关联的事务吗?

最佳答案

如果可用,则应始终调用 Dispose()。

对于 NHibernate 的事务,除非 Commit() 已经被调用,否则 Dispose() 将触发回滚。如果 Commit() 出错,您不需要调用 Rollback()。虽然恕我直言,你仍然应该调用 Dispose(),如果只是为了遵循模式。

对于 session ,询问“Close() 是否调用 Dispose()?”有点倒退。我“怀疑”它们可能是等价的,但总是调用它的 Dispose() 是一种很好的形式。这样做时,您不需要单独调用 Close()。

关于nhibernate - 使用 NHibernate 和事务,我是在提交失败时回滚还是在单次提交时自动回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1392702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com