Jon*_*röm 7 sql-server sql-server-2008-r2 transaction c#
在我们的应用程序中,我们使用的是 TransactionScope。我们的目标是不使用 MSDTC 服务,因为它比轻量级事务慢很多。
using (var transactionScope = new TransactionScope())
{
...
transactionScope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
当连接到测试数据库时,我们不需要 MSDTC,但在同一台机器上执行的完全相同的代码在连接到生产或开发数据库时升级为使用 MSDTC。
开发数据库不是集群的,也不是命名实例。
所有都是 SQL Server 2008 (10.50.2500) 并且连接字符串完全相同,除了主机名。
数据库的设置似乎必须有所不同。关于这可能是什么的任何想法?
编辑
该事务用于保护两个不同表中的插入。我注意到还有两个调用导致了两个选择。这些不需要在交易中,所以我将它们移到了它之外。然后,所有三个数据库中都不再需要 MSDTC。问题解决了,但不知道是什么原因造成的。
小智 5
以下是您可以尝试使其正常工作的一些方法:
Enlist=false在您的连接字符串中进行比较MultipleActiveResultSets=true在您的连接字符串中进行比较TransactionScope,但不能同时使用多个连接。但是,您可以保持ThreadStatic连接并传递它(或者,正如我们所做的那样,ThreadLocal<>在 db 包装器类中使用)-这为我们解决了 ASP.NET 中导致不必要升级的并发问题ConnectionString另一个连接的属性来创建你的新连接——它可能和原来的不一样,这会导致升级我发现有用的东西:
ConnectionScope堂课给了我一些想法:http : //blogs.msdn.com/b/dataaccess/archive/2006/02/14/532026.aspxTransactionScope除了默认的ctor之外还有更多!http://blogs.msdn.com/b/dbrowne/archive/2010/06/03/using-new-transactionscope-thinked-harmful.aspx| 归档时间: |
|
| 查看次数: |
8445 次 |
| 最近记录: |