代码之家  ›  专栏  ›  技术社区  ›  Rinor

为什么EF Core中的DbContext在事务回滚后返回已更改的实体

  •  2
  • Rinor  · 技术社区  · 6 年前

    我想验证事务是否在发生异常时回滚。下面的方法可能引发异常。

    // method Checkout(user, reduceMoney, addBill)
    using (var transaction = _botContext.Database.BeginTransaction())
    {
        try
        {
            await FirstDbUpdate(user, reduceMoney);
            await SecondDbUpdate(user, addBill); // potential exception
    
            transaction.Commit();
        }
        catch (Exception ex)
        {
            // ...
        }
    }
    

    回滚 我写了这个测试:

    [Test]
    public async Task Test_TransactionFail_RevertedUserUpdate()
    {
        // Arrange user{budget: 10}
        var user = await _userRepository.GetByName("John Doe");
        var reduceMoney = 10m;
    
        // Act - null causes an exception
        await _service.Checkout(user, reduceMoney, null);  
    
        // Assert
        var userRetrieved = await _userRepository.GetByName("John Doe");
        Assert.AreEqual(10, userRetrieved.Budget);
    }
    

    所以问题是为什么DbContext会返回 未持久化的数据

    1 回复  |  直到 6 年前