我想验证事务是否在出现异常的情况下回滚。下面的方法可能会引发异常。// 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);}断言失败是因为用户的预算为 0。即看起来更改是持久的,但实际上并非如此(这是正确的行为)。所以问题是为什么 DbContext 会返回未持久化的数据,它是从哪里得到的?回滚不应该删除它们吗?
1 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
因为您在某个上下文实例中,所以 Assert 中的查询将从同一个实例加载,而不是直接查询您的数据库。
尝试使用其他实例或重新加载它https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.changetracking.entityentry.reload?view=efcore-2.0
- 1 回答
- 0 关注
- 326 浏览
添加回答
举报
0/150
提交
取消