C# TransactionScope未回滚,尽管未调用complete()

C# TransactionScope未回滚,尽管未调用complete(),c#,sql,entity-framework,C#,Sql,Entity Framework,我正在使用TransactionScope回滚失败的事务 bool errorReported = false; Action<ImportErrorLog> newErrorCallback = e => { errorReported = true; errorCallback(e); }; using (var transaction = new TransactionScope()) { foreach (ImportTaskDefinitio

我正在使用TransactionScope回滚失败的事务

bool errorReported = false;
Action<ImportErrorLog> newErrorCallback = e =>
{
    errorReported = true;
    errorCallback(e);
};

using (var transaction = new TransactionScope())
{
    foreach (ImportTaskDefinition task in taskDefinition)
    {
        loader.Load(streamFile, newErrorCallback, task.DestinationTable, ProcessingTaskId);
    }
    if (!errorReported)
        transaction.Complete();
}
bool errorReported=false;
操作newErrorCallback=e=>
{
errorReported=true;
(e);
};
使用(var transaction=new TransactionScope())
{
foreach(任务定义中的ImportTaskDefinition任务)
{
loader.Load(streamFile、newErrorCallback、task.DestinationTable、ProcessingTaskKid);
}
如果(!错误报告)
transaction.Complete();
}
我确信在此代码之前或之后都没有启动TransactionScope。 我正在使用实体框架插入数据库

无论
errorReported
的状态如何,如果出现错误,事务将不会回滚


我缺少什么?

TransactionScope
设置
Transaction.Current
。这就是它的全部功能。任何想要交易的东西都必须查看该财产

我相信EF在每次出于任何原因打开连接时都会这样做。可能在安装作用域时,您的连接已经打开

打开作用域内的连接或手动登记


EF还有另一个讨厌的“设计决策”:默认情况下,它会为每个查询打开一个新连接。这会以不确定的方式导致分布式事务。一定要避免这种情况。

也许我用来加载工厂的依赖项注入可能是问题的根源,那么…在本指南中搜索,谢谢:)如果您决定将该块作为自己的事务,独立于环境事务,您可以执行
新建事务范围(TransactionScopeOption.RequiresNew)