Entity Framework 6 的回滚操作

4
我正在使用Entity Framework 6访问SQL Server 2012数据库的项目中。我们团队有一个未决的讨论,关于回滚后db上下文的状态。很明显,回滚后事务对数据库没有影响,但是上下文呢?我所在的团队认为,db上下文也将回滚,就像数据库更改一样。换句话说,可以安全地继续在上下文上工作,而不必担心被回滚的事务中的某些更改仍然存在于上下文中。请问是否能够解决这个问题?我已经找了很久,但没有找到清晰的答案。如果我的假设是错误的,那么我会非常失望,因为这意味着我们应该在更新集合的迭代过程中停止,丢弃上下文,并在某个更新回滚的情况下重新开始。
1个回答

6

context不会受到任何影响。即使回滚了,您仍然可以使用它。只有数据库更改将被回滚,DbContextTransaction一旦提交或回滚后就应该被处理。

您可以像下面展示的那样使用EF 6的最新事务API。

using (var context = new YourContext()) 
            { 
                using (var dbContextTransaction = context.Database.BeginTransaction()) 
                { 
                    try 
                    { 
                        //your db operations

                        context.SaveChanges(); 

                        dbContextTransaction.Commit(); 
                    } 
                    catch (Exception) 
                    { 
                        dbContextTransaction.Rollback(); 
                    } 
                } 
            } 

您可以在此处阅读更多相关信息:Entity Framework 事务处理

1
我仍然不确定这会带来什么后果。在回滚之后,上下文与数据库不同步。下一次在此上下文上执行SaveChanges和Commit时会发生什么?之前被回滚的记录现在是否会提交到数据库中。换句话说,在回滚后,上下文是否不安全可用于操作? - Peder Skånning
你可以在回滚后使用 context。换句话说,context 可以安全地用于任何其他目的,因此回滚不会对 context 做任何操作。它只影响 dbContextTransaction 和数据库记录。 - Sampath
这个有什么反馈吗?如果这对你没有帮助,请告诉我。那么我可以删除这篇文章。 - Sampath
1
谢谢,这非常有帮助。这澄清了在EF上使用事务的用法。 - Peder Skånning
不客气 :) 希望您能接受这个解决方案并点个赞。请参考如何操作:http://stackoverflow.com/tour - Sampath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接