C# 无法在事务作用域中登记连接对象
我正在使用TransactionScope测试数据库操作。这是测试类: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
//测试类
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
中的方法时出错。否则事务范围工作正常。