c# - Entity Framework 数据库更新但数据库上下文未显示更新

标签 c# entity-framework unit-testing entity-framework-6 identityserver4

我有以下设置:

  • 为 IdentityServer4 使用 EF6 的 .NetCore Web API。
  • 测试 API 的单元测试项目。
  • 数据库上下文是从 Web 主机的服务中检索的,因此应该是一个单例和相同的引用。

通过以下步骤导致我的问题:

  1. 在测试之前,我用资源和一些声明填充数据库。
  2. 单元测试发出 HTTP DELETE 请求,导致声明被删除。这在数据库中显示为 context.SaveChanges()被称为。
  3. 然后单元测试使用数据库上下文断言声明已被删除。由于上下文似乎没有更新而失败。

问题是单元测试中的 EF DB 上下文似乎没有看到删除 API 的数据库上下文所做的声明。

我尝试过的事情:

  • 使用网络主机服务通过 _host.Services.GetServices<ConfigurationDbContext>().First(service => service.GetType() == typeof(ConfigurationDbContext)) 检索数据库上下文.
    • 我通过运行检查过服务中只存在一个 ConfigurationDbContext。
  • 使用 context.Entry(resource).Reload() 重新加载单元测试的上下文资源条目.
  • 从网络主机重新检索上下文。

观察:

  • 单元测试的上下文在删除之前似乎是最新的。
  • 删除资源而不是其声明之一似乎由单元测试的上下文跟踪。
  • 数据库符合预期,因此被测代码似乎按预期工作,只是单元测试的上下文没有更新。
  • 单步执行时 API 中的数据库上下文正在更新导致 context.SaveChanges() 之后。打电话。

问题:

  • 有人遇到过 EF DB 上下文不更新的问题吗?
  • 是否有一种我缺少的硬刷新方法会强制重新评估与引用数据库相关的上下文状态?
  • 是否有某种缓存使单元测试的数据库上下文相信它是最新的。

非常感谢。

最佳答案

感谢 Eric J 和 DevilSuichiro 帮助我解决了我的问题。问题是我不应该尝试使用相同的数据库上下文。通过检索新的数据库上下文而不是尝试重用相同的数据库上下文,我能够验证我的测试结果。

再次感谢。

关于c# - Entity Framework 数据库更新但数据库上下文未显示更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594481/

相关文章:

c# - Xamarin 可移植类库中的简单获取请求(我需要它在 iOS 和 Windows Phone 上运行)

c# - 如何在 C# 中使用 trim() 来消除更多空格?

entity-framework - Entity Framework 核心 : How to solve Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths

c# - Entity Framework 和大型查询。什么实用?

unit-testing - 你如何处理失败的单元测试?

php - 在 Laravel 中使用 PHPUnit 测试 HTTP 动词时遇到问题

c# - 如何测试 Subversion 功能?

c# - 如何在使用 Bouncy CaSTLe 加密之前填充数据

c# - 使用 SQL 命令从数据库读取最后插入的 UID

c# - Entity Framework : Unknown column in 'where clause