Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# 使用TransactionScope()浏览,但事务为0_C#_Entity Framework_Transactionscope_Glimpse - Fatal编程技术网

C# 使用TransactionScope()浏览,但事务为0

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 (

我使用TransactionScope的方式如下:

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.ss‌​dl|res://*/EF.EfDataModel.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;data source=SERVER;password=PASS;persist security info=True;user id=USER&quot;" 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时,我总是遇到问题。