Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net TransactionScope和SQL Server Compact_.net_Sql Server_Entity Framework_Transactionscope_Distributed Transactions - Fatal编程技术网

.net TransactionScope和SQL Server Compact

.net TransactionScope和SQL Server Compact,.net,sql-server,entity-framework,transactionscope,distributed-transactions,.net,Sql Server,Entity Framework,Transactionscope,Distributed Transactions,SQL Server Compact不支持分布式事务。因此,如果TransactionScope内有多个连接,则会引发异常。有没有办法将ADO.NET提供程序设置为对同一连接字符串使用一个连接 我知道我可以通过connection.BeginTransaction使用常规事务,但TransactionScope更适合我 更新 抱歉,我没有提到我使用实体框架,所以我无法控制SQL命令。我可以传递连接字符串。由于某种原因,在TransactionScope中为一个连接字符串创建了多个connecti

SQL Server Compact不支持分布式事务。因此,如果TransactionScope内有多个连接,则会引发异常。有没有办法将ADO.NET提供程序设置为对同一连接字符串使用一个连接

我知道我可以通过connection.BeginTransaction使用常规事务,但TransactionScope更适合我

更新
抱歉,我没有提到我使用实体框架,所以我无法控制SQL命令。我可以传递连接字符串。由于某种原因,在TransactionScope中为一个连接字符串创建了多个connections对象。

更新了答案(代码示例来自):


更新

正如您所说,另一个解决方案是创建一个连接对象,并在对象上下文的构造函数中使用它


关于实体何时打开新连接。

我的错误是将连接字符串传递给了
ObjectContext
。如果我传递连接对象,则只使用一个连接。

能否提供一些代码?您可以手动设置命令的连接,但@Idsa在他的问题中使用了该连接。正如你从他自己的回答中所看到的那样,它成功了!不知道。向上投票。您的解决方案将适用于一个ObjectContext。但是我需要一个通过几个ObjectContext的连接,正如我在下面发布的那样。但我会记下你的答案。@leppie,SQLCE支持TransactionScope。它不支持分布式transactions@Idsa还加了你的谎言。我站出来纠正。SQLCE有一个限制,即连接应该在transactionscope中打开。我已经打开了连接,这就是为什么我的测试不起作用。下面是technet文章,以供进一步参考
using (var context = new MyContext())
{
    using (var txscope = new TransactionScope())
    {
        context.Connection.Open();
        // do query 1
        // do query 2
    }
}