我有以下代码:
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
各种“转换”方法使用DbContext
的{{1}}方法将数据添加到数据库中。
为了测试这个,我在ConvertMembersAsync方法中产生了一个故意的错误。 SaveChanges
块中的代码可以正常处理。但是,在异常之前执行的SaveChanges操作不会回滚。
底层提供者是SQLExpress LocalDb的提供者。 连接字符串:
“Data Source =(LocalDb)\ v11.0; Initial Catalog = OurDb; MultipleActiveResultSets = True; Integrated Security = True; AttachDBFilename = | DataDirectory | MyDb.mdf”
我做错了什么?
答案 0 :(得分:0)
您需要将DependentTransaction
传递给Async方法。 Async方法需要在新DependentTransaction
的构造函数中插入此TransactionScope
。 It is documented on MSDN