【问题标题】:Using ADO.Net transactions within a TransactionScope?在 TransactionScope 中使用 ADO.Net 事务?
【发布时间】:2009-11-23 22:45:25
【问题描述】:

我一直在阅读有关 TransactionScope 的文章,并且对它与 ADO.Net 事务的互操作性有疑问。现在我们有一些数据访问方法,每个方法都调用一个存储过程并开始和提交他们自己的事务。直截了当的样板文件,方法如下所示:

sqlCommand = //create SQLCommand with Stored proc
SqlTransaction myTransaction = myConnection.BeginTransaction();
sqlCommand.Transaction = sqlTransaction;
sqlCommand.Execute();
sqlTransaction.Commit();

我已经简化了一些事情,但你明白了。

我现在需要连续调用其中两个类方法,并将它们作为一个团队从我的业务层提交或回滚。我不能修改数据方法,所以我想把这两个调用放在一个 TransactionScope 块中。

如果我这样做,在创建 TransactionScope 时应该使用什么样的参数?我已经使用 TransactionScopeOption.RequiresNew 选项进行了尝试,并且一切似乎都有效,但这只是我的实验,我不确定这是否是可行的方法。 (这里我要注意的是,这些是专门的 SQL 事务,在同一个 SQL 服务器上运行。)

我看到 TransactionScope 具有处理 COM+ 事务的构造函数选项。因为我使用的是 ADO.Net 事务,所以这与这里有关吗?谢谢你的建议。

【问题讨论】:

    标签: ado.net transactionscope


    【解决方案1】:

    TransactionScope 文档here 是一个很好的起点。

    基本上,它不需要在 ADO 级别处理事务。连接将自动考虑现有的环境事务(默认)。

    请记住,您还可以通过连接字符串更改连接在环境事务中登记的方式。此link 将提供更多详细信息。

    登记“真”。 true 表示 SQL Server 连接池 自动在创建线程的当前线程中登记连接 事务上下文。

    【讨论】:

    • msdn 链接已失效。一个问题是,如果连接是在范围之外创建的,则需要通过调用 connection.EnlistTransaction(Transaction.Current) 手动将其加入环境事务中。
    • 固定链接!我已经链接到 MSDN 文档并发布了 sn-p。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2014-05-30
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多