0

我有以下代码:

Public Async Function Convert(schemaProgress As IProgress(Of ProgressReport), membersProgress As IProgress(Of Boolean), indexProgress As IProgress(Of Boolean)) As Task
   Try
        Using scope As New TransactionScope

            Await ConvertRootAsync()

            Dim schemaConversion = ConvertSchemaAsync(schemaProgress)

            Await ConvertMembersAsync(membersProgress)
            Await ConvertIndexAsync(indexProgress)
            Await schemaConversion

            scope.Complete()
        End Using
    Catch ex As Exception
        Logger.ErrorException("", ex)
        Throw New FatalConversionException
    End Try
End Function

各种 'Convert' 方法使用DbContext'SaveChanges方法将数据添加到数据库。

为了测试这一点,我在 ConvertMembersAsync 方法中产生了一个故意的错误。块中的代码Catch处理得很好。但是在 Exception 之前已经执行的 SaveChanges 操作不会回滚。

底层提供程序是 SQLExpress LocalDb 的提供程序。连接字符串:

“数据源=(LocalDb)\v11.0;初始目录=OurDb;MultipleActiveResultSets=True;集成安全=True;AttachDBFilename=|DataDirectory|MyDb.mdf”

我究竟做错了什么?

4

1 回答 1

0

您需要将 a 传递DependentTransaction给 Async 方法。Async 方法需要将 this 插入到DependentTransactionnew 的构造函数中TransactionScope它记录在 MSDN 上

于 2013-05-20T17:37:32.363 回答