我正在使用Entity Framework 6并遇到无法从回退事务中恢复的情况。为什么我无法从事务回滚恢复?
我需要遍历一个列表,并为每个项目添加一些条目到两个表。我的代码大致是这样的:
Dim db = New Data.Context
Try
For Each item in list
Using tx = db.Database.BeginTransaction
'add objects to table 1
'add objects to table 2
db.SaveChanges()
tx.Commit()
End Using
Next
Catch ex As Exception
'record the error
End Try
我预计它会在整个列表循环,并添加条目时SaveChanges
成功,并记录他们的时候失败。
但每当SaveChanges
调用失败,事务回滚和我移动到下一个项目在列表中,然后SaveChanges
失败的一个太,用同样的错误。就好像上下文中仍然存在新的对象,并在下一次循环中尝试重新保存它们。所以,在回滚过程中,我怎么能告诉上下文来忘记这些对象,这样我就可以继续循环?
所以你得到一个异常,然后代码继续在你的for/next循环中? – DavidG 2014-10-30 10:56:17
@DavidG:确实如此。但如果有更好的方法,我不会重视那个设计。 – 2014-10-30 11:18:14