【发布时间】:2010-02-01 17:07:20
【问题描述】:
现在我有使用预期方法在 SQL Server 上启动事务的代码:
ExecuteNonQuery(connection, "BEGIN TRANSACTION");
try
{
DoABunchOnStuff(connection);
DoSomeMoreStuff(connection);
JustAFewMoreThings(connection);
ExecuteNonQuery(connection, "COMMIT TRANSACTION");
}
catch (Exception)
{
ExecuteNonQuery(connection, "ROLLBACK TRANSACTION");
throw;
}
现在我正在考虑研究使用 ADO.NET 提供的事务抽象的想法的可能性:
DbTransaction trans = connection.BeginTransaction();
try
{
DoABunchOnStuff(connection);
DoSomeMoreStuff(connection);
JustAFewMoreThings(connection);
trans.Commit();
}
catch (Exception)
{
trans.Rollback();
throw;
}
这种从基于 SQL Server 的事务到 ADO.NET 事务的简单转换的问题是错误:
ExecuteNonQuery 需要命令 进行交易时 分配给命令的连接是 在待处理的本地事务中。这 命令的事务属性 尚未初始化。
我是否正确假设如果我想使用 ADO.NET 事务,我必须完全破坏基础架构,将 DbTransaction 对象传递给在内部运行或可能运行的每个方法交易?
【问题讨论】:
标签: sql-server ado.net transactions