问题标签 [transactionscope]

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 回答
946 浏览

c# - C# TransactionScope - L2E

在 Linq to Entities 上使用 System.Transactions.TransactionScope 是否值得?

MS 文档中,它说 ObjectContext.SaveChanges() 中的 SQL 调用都在内部整合到一个事务中。

我们有 1 个数据库连接,即文件系统上的本地 SQLite 数据库。我们只是想确保我们对数据库的所有操作都是原子的,我们需要 TransactionScope 吗? IE 当我们调用一些删除、更新、插入等操作时,我们希望它们全部发生或根本不发生。

0 投票
2 回答
1323 浏览

entity-framework - TransactionScope 如何保证跨多个数据库的数据完整性?

有人能告诉我 TransactionScope 如何保证跨多个数据库的数据完整性的原理吗?我想它首先将命令发送到数据库,然后等待数据库响应,然后再向它们发送消息以应用之前发送的命令。然而,当发送这些应用消息时突然停止执行时,我们仍然可能最终得到一个应用了命令的数据库和一个没有应用命令的数据库。任何人都可以对此有所了解吗?

编辑:

我想我要问的是在断电或突然关机的情况下写入多个数据库时,我是否可以依靠 TransactionScope 来保证数据完整性。

谢谢,巴斯

例子:

0 投票
2 回答
4647 浏览

sql-server - TransactionScope 和连接池

我正在尝试处理我们的应用程序中是否存在使用不正确 IsolationLevels 进行数据库连接的问题。我们的应用程序是一个使用 SQL Server 2005 的 .Net 3.5 数据库应用程序。

我发现连接的 IsolationLevel 在返回到连接池时不会重置(请参见此处),并且在此博客文章中读到每个新创建的 TransactionScope 都分配给它自己的连接池,这让我感到非常惊讶。

我们的数据库更新(通过我们的业务对象)发生在 TransactionScope 内(为每个业务对象图更新创建一个新的)。但是我们的提取不使用显式事务。所以我想知道的是,我们是否会遇到这样的情况:我们的 fetch 操作(应该使用默认的 IsolationLevel - Read Committed)会重用池中已用于更新的连接,并继承更新 IsolationLevel (可重复读取)?或者我们的更新是否可以保证使用不同的连接池,因为它们被包装在 TransactionScope 中?

提前致谢,

格雷厄姆

0 投票
0 回答
595 浏览

c# - TransactionScope 在某些地方有效,而在其他地方无效

在 Windows Server 2003 上使用 ASP.NET 3.5、Linq to SQL、SQL Server 2005。在本地 XP SP3 上运行 VS 2008。

我们需要能够在事务中包装插入、更新和删除。当我们第一次尝试用 包装代码块时using(var trans = new TransactionScope()) { ...; trans.Complete(); },我们得到了一个适当的异常,告诉我们需要为远程事务启用网络访问。 我们这样做了,事情开始按我们预期的方式进行。

快进到今天。我们的应用程序中有一个很少使用的部分也接受了 TransactionScope 处理。尽管事务在我们代码库的所有其他部分都可以正常工作,但我们今天发现这个很少使用的部分正在抛出与以前相同的“网络访问”异常:

分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。http://img101.imageshack.us/img101/5480/msdtcnetworkaccesserror.jpg

这是导致异常的代码:

如果您有任何建议,我们将不胜感激。让我知道我是否可以解释更多。提前致谢!!

0 投票
1 回答
2421 浏览

nhibernate - 带有 TransactionScope 和增量标识生成器的 SQLite

当尝试将 SQLite 与 System.Transactions TransactionScope 与身份生成器作为增量一起使用时,我注意到当 NHibernate 试图检索下一个身份编号时,我遇到了一个异常(下面连同代码一起给出)。

这似乎是因为新的 SQLite 连接正在执行当前事务的自动登记。据我所知,SQLite 只支持单写事务,但应该支持多读,所以我很惊讶我得到一个读操作的数据库锁定异常。有没有人以这种方式使用带有事务范围的 SQLite。

如果我使用 NHibernate Transaction 而不是 TransactionScope,则相同的代码可以正常工作

代码块:

例外:

0 投票
4 回答
17599 浏览

asp.net - MSDTC - 与底层事务管理器的通信失败(防火墙打开,MSDTC 网络访问开启)

我的 ASP.NET Web 表单系统出现问题。

它在我们的测试服务器上工作,但现在我们将其投入使用,其中一台服务器位于 DMZ 内,而 SQL 服务器位于其外部(尽管仍在我们的网络上 - 尽管是不同的子网)

我已经在这两个框之间完全打开了防火墙,看看是否是问题所在,每当我们尝试使用“TransactionScope”时,它仍然会给出错误消息“与底层事务管理器的通信失败”。我们可以访问数据以进行检索,它只是破坏它的事务。

我们也用msdtc ping 测试了连接,并在防火墙上修改了ping 成功,但出现同样的错误!

我该如何解决这个错误?

任何帮助都会很棒,因为我们今天有一个可以上线的系统。恐慌 :)

编辑:我创建了一个更简单的测试页面,其中包含如下事务,并且工作正常。嵌套事务会导致这种错误吗?如果是这样,为什么这只会在使用带防火墙的 dmz 中的 live box 时引起问题?

这是问题发生时我们得到的ErrorStack:在

0 投票
2 回答
31961 浏览

c# - 为什么 TransactionScope 操作无效?

我有一个使用递归循环将项目插入 SQL Server 2005 数据库的例程。启动循环的第一个调用包含在使用 TransactionScope 的事务中。当我第一次调用 ProcessItem 时,myItem 数据按预期插入到数据库中。但是,当从 ProcessItemLinks 或 ProcessItemComments 调用 ProcessItem 时,我收到以下错误。

“该操作对交易状态无效”</p>

我在 Windows 7 上使用 VS 2008 进行调试,并运行 MSDTC 以启用分布式事务。下面的代码不是我的生产代码,但设置完全相同。AddItemToDatabase 是我无法修改的类上的一种方法,它使用标准的 ExecuteNonQuery() 创建连接,然后在完成后关闭并处理。

我查看了此处和互联网上的其他帖子,但仍然无法解决此问题。任何帮助将非常感激。

这是堆栈跟踪的顶部。不幸的是,我无法将到目前为止的积累作为我无法披露的公司敏感信息来展示。

0 投票
1 回答
2035 浏览

c# - 如何在 C# 中实现内存事务范围?

我们有一个缓存,我想在其中放置一些事务范围,以便任何进程都必须显式地“提交”它想要对缓存对象执行的更改,并在进程中途失败时回滚任何更改。

现在,我们正在对 get 请求中的缓存对象进行深度克隆,它可以工作,但它不是一个干净的解决方案,并且还涉及到相当多的维护。

我记得不久前在 .NetRocks 上听说过一些 MTS(内存事务范围)解决方案,但不记得它的名称了!有人知道那里有一个好的 MTS 框架吗?或者,如果我要实现自己的,是否有任何好的指导方针/模式来说明如何做到这一点?

谢谢,

编辑:我的缩写完全错误!应该是STM,Software Transaction Memory

0 投票
2 回答
4159 浏览

nhibernate - 失败的 Castle ActiveRecord TransactionScope 导致将来的查询无效

我正在尝试解决使用回滚的 Castle ActiveRecord TransactionScope 时的问题。

回滚后,我无法查询 Dog 表。“Dog.FindFirst()”行因“无法为 Dog 执行 SlicedFindAll”而失败,因为它无法插入 dogMissingName。

堆栈跟踪如下:

0 投票
1 回答
517 浏览

asp.net-mvc - 如何在 ASP.NET MVC 中处理基于请求的 DB 事务?

我正在使用 SubSonic 3.0 (SimpleRepository) 来处理我的 ASP.NET MVC 1.0 应用程序中的数据库访问。

最好为每个 Web 请求处理一个事务,如果一切顺利,则提交并在出现异常时回滚。这可能吗?如果是这样,怎么做?

我知道这个话题已经讨论过很多次了,但我就是找不到满意的答案。我已经构建了自己的解决方案(在控制器中创建一个 TransactionScope,然后在 OnActionExecuted 中提交/回滚),但事实证明它非常不可靠。