在 TransactionScope 中使用 ADO.Net 事务?

发布于 2024-08-12 08:45:13 字数 721 浏览 1 评论 0原文

我一直在阅读有关 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 事务,所以这与这里相关吗?谢谢你的建议。

I've been reading about TransactionScope and had a question about its interoperability with ADO.Net transactions. Right now we have some data access methods that each call a stored proc and begin and commit their own individual transactions. Straighforward, boilerplate stuff, the methods look like this:

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

I've simplified things a bit, but you get the idea.

I now need to call two of these class methods consecutively and commit or roll them back as a team from my business layer. I can't modify the data methods, so I was thinking of putting the two calls in a TransactionScope block.

If I do this, what sort of parameters should I use when creating the TransactionScope? I've already tried this using the TransactionScopeOption.RequiresNew option and things seem to work, but that's just me experimenting and I'm not sure if it's the way to go. (I'll note here that these are SQL transactions exclusively, running on the same SQL server.)

I see that TransactionScope has constructor options to deal with COM+ transactions. Because I'm using ADO.Net transactions, is that relevant here? Thanks for the advice.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

草莓味的萝莉 2024-08-19 08:45:13

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

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

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

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

The TransactionScope documentation here is a good place to start.

Basically it makes handling transactions at the ADO level unnecessary. Connections will automatically take into account existing ambient transactions (the default).

Keep in mind that you can also change the way connections enlist in ambient transactions via the connection string. This link will provide more detail.

Enlist 'true'. true indicates that the SQL Server connection pooler
automatically enlists the connection in the creation thread's current
transaction context.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文