我正在使用Entity Framework 6在SQL Server 2012上进行数据库访问的项目。
我们的团队正在讨论回滚后db上下文的状态。很明显,在执行回滚后,数据库不受事务更改的影响。但是背景呢?
我在团队中认为数据库上下文已回滚以及数据库更改。换句话说,我认为继续处理上下文是安全的,而不会冒回滚事务中的某些更改仍然潜伏在上下文中的某个地方。
有人可以杀死这只鸭子,所以我们可以结束讨论。我没有找到它就找到了一个明确的答案。
在我的假设中,上下文被回滚以及数据库更改时,我会感到非常失望。这意味着我们应该通过一组复杂的更新停止迭代,丢弃上下文,并在其中一个更新回滚的情况下重新开始。
答案 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