C# TransactionScope未回滚,尽管未调用complete()
我正在使用TransactionScope回滚失败的事务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
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)