Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
C# 无法在事务作用域中登记连接对象_C#_Entity Framework_Sql Server Ce_Transactionscope - Fatal编程技术网

C# 无法在事务作用域中登记连接对象

C# 无法在事务作用域中登记连接对象,c#,entity-framework,sql-server-ce,transactionscope,C#,Entity Framework,Sql Server Ce,Transactionscope,我正在使用TransactionScope测试数据库操作。这是测试类: //测试类 private TransactionScope _TransactionScope=null; [测试初始化] 公共无效初始化() { _transactionScope=新transactionScope(); } [测试清理] 公共空间清理() { 如果(_transactionScope!=null) { _transactionScope.Dispose(); _transactionScope=nul

我正在使用TransactionScope测试数据库操作。这是测试类:

//测试类
private TransactionScope _TransactionScope=null;
[测试初始化]
公共无效初始化()
{
_transactionScope=新transactionScope();
}
[测试清理]
公共空间清理()
{
如果(_transactionScope!=null)
{
_transactionScope.Dispose();
_transactionScope=null;
}
}
[测试方法]
[DeploymentItem(“Db.sdf”)]
public void AddToPresentationsTest()
{           
var item=TestItem();
var db=新的DbEntities();
var target=newdatabasecontroller{Entities=db};
target.AddToItems(项目);
var result=db.Items.Any(p=>p.Text.Equals(item.Text));
断言(结果);
}
在每次测试之前创建TransactionScope,并在测试完成后进行处理。调用AddToItems方法时,出现以下错误:

System.Data.EntityException:基础提供程序在打开时失败。-->System.InvalidOperationException:无法在事务范围中登记连接对象。

DatabaseController具有以下代码:

// DatabaseController class

private DbEntities _entities;

public DbEntities Entities
{
    get { return _entities ?? (_entities = new DbEntities());}
    set { _entities = value; }
}

protected override void Dispose(bool disposing)
{
    if (disposing && _entities != null)
    {
        _entities.Dispose();
    }
    base.Dispose(disposing);
}

public void AddToItems(Item item)
{
    Entities.Items.Add(item);
    Entities.SaveChanges();
}        

我使用Sql Server Compact 4.0。你能指出我做错了什么吗

可以猜测,TransactionScope需要升级到分布式或嵌套事务

这可能是因为同时打开了多个连接-


但是CE确实支持,因此理论上,只要您的所有连接使用相同的连接字符串,并且在打开另一个连接之前关闭每个连接,
TransactionScope
就不应该升级为分布式。

谢谢,我不知道SQL CE有这样的限制。@Ashton Hearts——恐怕我不太使用CE——这里有一些解决方法,所有连接实际上都使用相同的连接字符串。我还注意到在调用
DatabaseController
中的方法时出错。否则事务范围工作正常。