Entity Framework 7 回滚方法

4

如何在Entity Framework 7中回滚事务?

在旧版本中,我们有以下方法:

            try
            {
                dataContext.ChangeTracker.DetectChanges();
                dataContext.SaveChanges();
            }
            catch (Exception e)
            {
                dataContext.Database.CurrentTransaction.Rollback();
                Debug.WriteLine(e.Message);
            }

现在我使用的是

"EntityFramework.Commands": "7.0.0-rc1-final"

但它没有这个方法。


3
但是,在内部,SaveChanges已经在事务中运行。因此,如果保存更改操作失败,该事务将会回滚。 - Evk
@Evk,在旧版EF中,SaveChanges方法是否已经包含了事务失败的处理?如果是,为什么还需要发明Rollback方法呢? - user1108948
7
据我所知,它始终包含在事务中。至于为什么会有回滚 - 您可以通过dataContext.Database.BeginTransaction()显式启动事务。然后,您可以多次调用SaveChanges。如果您想要回滚更改-则需要调用Rollback。 - Evk
1个回答

9

7.0.0-rc1-final中建议使用的事务模式与EF6相同:

using (var transaction = context.Database.BeginTransaction())
{
    try
    {
        /*do something*/
        context.SaveChanges();

        transaction.Commit();
    }
    catch (Exception ex)
    {
        transaction.Rollback();
    }
}

此外,EF7提供了异步API(而EF6没有):
using (var transaction = await context.Database.BeginTransactionAsync())

3
目前 文档 表示:“如果任何一个命令失败,事务将在处理完后自动回滚”。 - smg

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