2016-10-26 55 views
2

我在一个项目中使用实体框架6的SQL Server数据库访问2012回滚对实体框架6

我们对我们的团队回滚之后,关于该数据库环境的状态挂起讨论。清楚地表明,在执行回滚之后,数据库不受事务更改的影响。但是情况呢?

我在团队认为数据库上下文回滚以及数据库更改。换句话说,我认为继续在上下文环境中工作是安全的,不会冒险回滚事务的一些变化仍然潜藏在上下文中的某处。

有人可以杀死这只鸭子,所以我们可以结束讨论。我没有找到明确的答案,已经高调低调。

在我的假设中,如果出现上下文回滚以及数据库更改的情况,那么我会很失望。这意味着我们应该通过一组复杂的更新来停止迭代,放弃上下文,并在其中一个更新回滚的情况下重新开始。

回答

3

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

+0

我仍不能确定的这个consequeses。在回滚之后,上下文与数据库不同步。下次在此Context上执行SaveChanges和Commit时会发生什么?现在回滚的记录是否会被分配到数据库中。 换句话说,在Rolback之后,上下文会不安全吗? –

+0

你可以在回滚之后使用'context'。换句话说'context'可以安全地使用任何其他的目的,因此回滚对'context'没有任何影响。它只影响'dbContextTransaction',当然数据库记录。 – Sampath

+0

对此有何反馈?如果这对你没有帮助,请告诉我,然后我可以删除这篇文章。 – Sampath