问题标签 [system.transactions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5167 浏览

.net - 不同IsolationLevel的Inner TransactionScope,如何实现?

TransactionScope的当前实现缺乏在嵌套范围内更改 IsolationLevels 的能力。

MSDN声明:当使用嵌套的 TransactionScope 对象时,所有嵌套的范围必须配置为使用完全相同的隔离级别,如果它们想要加入环境事务。如果嵌套的 TransactionScope 对象尝试加入环境事务但它指定了不同的隔离级别,则会引发ArgumentException

但是 SQL Server 允许我们随时更改隔离级别,为什么 TransactionScope 不允许?我不明白。

BCL 中是否有任何关于嵌套 SQL 事务及其隔离级别的标准来禁止这种行为。我有哪些选择?我当然不能仅仅为了它们可以使用而设计类库并与它们一起提升隔离级别。

如果方法A()想要一个快照级别并调用想要读取已提交级别的方法 B()。方法A()在我开发的 LibraryA 中,方法B()在由一家虚构公司开发的 LibraryB 中。A()如何在不获取ArgumentException的情况下调用B()

0 投票
1 回答
380 浏览

.net - TransactionCompleted 事件的替代示例?

TransactionCompleted 的 MSDN 条目

您可以注册此事件,而不是使用 volatile 登记来获取交易的结果信息。

警告注册此事件会对它所附加的事务的性能产生负面影响。

有没有人有一个例子,甚至是一个解释,说明如何参与一个事务以便仅仅被通知它的完成?

0 投票
0 回答
660 浏览

ado.net - 使用 System.Transactions 的行级更新锁

我有一个 MSSQL 过程,其中包含以下代码:

我正在尝试将相同的行为移动到使用 OleDb 连接、命令和事务以实现相同结果的组件中。(这是一个使用上面显示的 SecurityAssignment 表的安全组件。无论该表是在 MSSQL、Oracle 还是 Db2 中,我都希望它能够工作)

鉴于上述 SQL,如果我使用以下代码运行测试

其中 Subject.GetAssignmentsHavingUser 运行上面的 sql 并返回结果集合,而 backgroundWork 是一个更新表中行的 Action,如下所示:

然后测试返回的foregroundResults 应该反映在backgroundWork 操作中所做的更改。

也就是说,我检索具有由 SQL 应用的 UPDLOCK、ROWLOCK 的 SecurityAssignment 表行列表,并且针对这些行的后续查询在该更新锁被释放之前不会返回 - 因此测试中的 foregroundResult 包括在背景线程。

这一切都很好。

现在,我想对与数据库无关的 SQL 做同样的事情,使用 OleDb 事务和隔离级别来实现相同的结果。我不能为我的生活,弄清楚如何去做。甚至有可能,还是这种行级锁定仅适用于数据库级别?

0 投票
1 回答
2455 浏览

entity-framework-4 - SQL CE 4 System.Transaction 支持

在这里提出了类似的问题,但没有答案。

我正在尝试将 System.Transactions.CommittableTransaction 与 EF CTP4 和 SQL CE 4 一起使用。

我为我的 ASP.NET MVC 控制器操作创建了以下事务属性:

当我使用这个过滤器时,我得到了错误:

System.InvalidOperationException:无法在事务范围内登记连接对象。

但是,以下测试通过:

这与我初始化 DbContext 的方式有关吗?

0 投票
5 回答
47566 浏览

asp.net - 分布式事务管理器 (MSDTC) 的网络访问已被禁用

错误:

分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。

0 投票
1 回答
8234 浏览

c# - 如何创建一个与 TransactionScope 一起使用的类?

只是想知道,如果我想创建一个做某事的类并且我希望能够在 TransactionScope 中使用,我需要实现什么?

那就是:我的班级需要知道它在事务中,但是如何在提交或回滚时收到通知?在回滚时,我将如何实际回滚?

我假设我的班级会有像“添加”、“更新”和“删除”这样只修改临时更改列表的方法,以及一个需要检测它是否在事务中并返回修改或未修改数据的方法“读取”因此,但是我需要一个以某种方式调用的方法 Commit/Rollback?

我会订阅 Transaction.TransactionCompleted 事件吗?如果是,如何避免多次订阅同一交易?

我注意到事务没有 ID,有没有办法管理/处理多个并发事务或嵌套事务?

System.Transactions的 MSDN 文档有很多内容,但它似乎是针对消费者而不是实现者的,所以我想知道是否有人有关于服务如何提供支持的良好资源(在网络上或在书中)交易?

让我们假设我的类没有已经支持事务并且能够“通过它”的底层存储。假设我的课程如下所示:

0 投票
2 回答
1650 浏览

.net - 跨 AppDomain 和进程的 TransactionScope

跨不同的 AppDomain 和进程使用 System.Transactions(主要是 TransactionScope)是真的吗?

DependentTransaction仅在一个 AppDomain 内起作用。

0 投票
2 回答
1950 浏览

sql-server-2008 - 为什么即使 TransactionScope.Complete() 从未调用过,嵌套事务也会提交?

我正在测试以了解嵌套事务的工作原理,并发现了这种令人不安和意外的行为。

我看到了另一个问题,但解决方案不适用。

如果我不指定TransactionScopeOption.RequiresNew(即我没有使用嵌套事务,只是一个嵌套作用域),那么当内部作用域没有完成时整个事务会回滚,调用otx.Complete时会出错()。这可以。

但我当然不希望嵌套事务在未成功完成时被提交!有谁知道这里发生了什么以及我如何获得预期的行为?

数据库是 SQL Server 2008 R2。

0 投票
2 回答
2109 浏览

sql-server - 使用 SqlConnection / System.Transactions 的每请求会话

我刚刚开始在一个项目中使用 Dapper,在过去的几年中主要使用的是 NHibernate 和 EF 等 ORM。

通常在我们的 Web 应用程序中,我们实现每个请求的会话,在请求开始时开始事务并在结束时提交。

在直接使用 SqlConnection / System.Transactions 时,我们是否应该做类似的事情?

StackOverflow 是如何做到的?

解决方案

听取@gbn 和@Sam Safron 的建议,我没有使用交易。在我的情况下,我只做读取查询,所以似乎没有真正的要求使用事务(与我被告知的隐式事务相反)。

我创建了一个轻量级会话接口,以便我可以使用每个请求的连接。这对我来说非常有益,因为使用 Dapper 我经常需要创建一些不同的查询来构建一个对象,并且宁愿共享相同的连接。

每个请求的连接范围和处理它的工作由我的 IoC 容器 (StructureMap) 完成:

0 投票
2 回答
71 浏览

.net - 仅在父事务完成时执行代码

下面的代码将输出:

使用 System.Transactions 如何让 EventPublisher 在父事务中登记,以便它仅在 CommandHandler 完成时执行。因此,输出将是:

代码: