gpt4 book ai didi

c# - 尽管没有调用 complete(),但 TransactionScope 没有回滚

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:50 25 4
gpt4 key购买 nike

我正在使用 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();
}

我确定在此代码之前或之后没有启动 TransactionScope。我正在使用 Entity Framework 插入我的数据库。

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

我错过了什么?

最佳答案

TransactionScope 设置 Transaction.Current。这就是它所做的一切。任何想要交易的东西都必须查看该属性。

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

打开范围内的连接或手动登记。

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

关于c# - 尽管没有调用 complete(),但 TransactionScope 没有回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30914358/

25 4 0