回滚实体框架6

时间:2016-10-26 12:55:03

标签: entity-framework entity-framework-6 rollback

我正在使用Entity Framework 6在SQL Server 2012上进行数据库访问的项目。

我们的团队正在讨论回滚后db上下文的状态。很明显,在执行回滚后,数据库不受事务更改的影响。但是背景呢?

我在团队中认为数据库上下文已回滚以及数据库更改。换句话说,我认为继续处理上下文是安全的,而不会冒回滚事务中的某些更改仍然潜伏在上下文中的某个地方。

有人可以杀死这只鸭子,所以我们可以结束讨论。我没有找到它就找到了一个明确的答案。

在我的假设中,上下文被回滚以及数据库更改时,我会感到非常失望。这意味着我们应该通过一组复杂的更新停止迭代,丢弃上下文,并在其中一个更新回滚的情况下重新开始。

1 个答案:

答案 0 :(得分:4)

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 Working with Transactions