C# 使用TransactionScope()浏览,但事务为0
我使用TransactionScope的方式如下:C# 使用TransactionScope()浏览,但事务为0,c#,entity-framework,transactionscope,glimpse,C#,Entity Framework,Transactionscope,Glimpse,我使用TransactionScope的方式如下: var efConnectionString = ConfigurationManager.ConnectionStrings["MainDbContext"].ConnectionString; var transactionOptions = new TransactionOptions(); transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted; using (
var efConnectionString = ConfigurationManager.ConnectionStrings["MainDbContext"].ConnectionString;
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
using (var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
using (var conn = new EntityConnection(efConnectionString))
{
conn.Open();
using (var context = new MainDbContext(conn, false))
{
// here are some actions, including EF data querying and modifications, and also context.Database.ExecuteSqlCommand();
context.SaveChanges();
}
}
scope.Complete();
}
当我在控制台中查看时,事务计数为0。若我检查数据库,我可以看到事务已经发生并提交。我做错什么了吗?如何查看正确的交易数量
编辑1:
MainDbContext连接字符串:
<add name="MainDbContext" connectionString="metadata=res://*/EF.EfDataModel.csdl|res://*/EF.EfDataModel.ssdl|res://*/EF.EfDataModel.msl;provider=Oracle.DataAccess.Client;provider connection string="data source=SERVER;password=PASS;persist security info=True;user id=USER"" providerName="System.Data.EntityClient" />
在SQL统计信息和每个已执行查询的详细信息中看不到任何事务的原因是,您使用的是未考虑的分布式事务 如果要查看事务数,则必须在GlimpsedB连接上使用BeginDbTransaction方法
这就是GlimpsedB如何跟踪新事务的开始,并在DbTransaction上调用Commit或Rollback时知道它何时结束GlimpsedB事务,即从GlimpsedB连接上的BeginDbTransaction方法返回的GlimpsedB事务。您的连接字符串是什么样子的,为什么要包装EntityConnection关于DbContext?我添加了连接字符串。我使用EntityConnection,因为我只需要一个连接,并且需要将它传递给DbContext。这里和这里的更多信息我以为你在使用EF。EF为上下文的数据库属性提供了一种事务机制。DbContext.Database.BeginTransactionSolationLevel.ReadCommitted;。这不是你想要的吗?您正在使用调用创建事务,而不是从其他地方获取它,因此不使用EF已经提供的东西没有多大意义。EF还将所有SaveChanges调用打包到事务中。是的,我正在使用EF。但是,我有Oracle db。因此,EF6不是一个选项,我需要使用EF5。DbContext.Database.BeginTransaction在EF6中不可用。另外,我需要执行一些纯SQL更新语句,这些语句不能包含在EF事务中。这就是为什么我要用TransactionScope包装所有内容。它不应该是必需的,因为EntityConnection应该使用DBProviderFactorys,但是您是否尝试过将EntityConnection包装在新的GlimpseDbConnectionnew EntityConnectionefConnectionString中?在使用Oracle db时,我总是遇到问题。