【问题标题】:How to best utilize DBContext with a Web API application如何在 Web API 应用程序中最好地利用 DBContext
【发布时间】:2013-06-18 15:49:53
【问题描述】:

我有一个使用实体框架 DBContext 来执行 CRUD 操作的 Web API。我的问题如下:

最初,我使用了我的 DBContext 的静态实例。但是,使用这种格式,当我再次查询数据集时,不会显示对数据库表的任何更改;数据已过时。

作为临时修复,在所有公共类函数的开头,我创建了一个新的 DBContext 对象并调用该对象以从数据库中获取数据。由于许多原因,这不是最好的主意。但是当我使用这种技术时,数据不再是陈旧的。

如何适当地利用 DBContext,以便多个用户始终可以从请求中看到当前数据库数据?我应该将 DBContext 作为我的类中的一个字段并在类的构造函数中实例化它吗?在这种情况下,每个类是否应该有自己的 DBContext 对象?

是否有适当使用 DBContext 的最佳实践?我担心向我的用户推送过时的数据和不准确的结果。

【问题讨论】:

  • 当您对数据库进行更改时,您是在同一个静态 DbContext 中还是以其他方式进行更改?
  • 我通过调用 Web API 检查表中的值。 Web API 返回数据。例如,该值可能是 451。然后我通过使用 SSMS 直接在表中键入一个新值来更改数据库。当我再次运行 API 调用时,将数据输入数据库后,API 返回旧值而不是我刚刚输入的新值。当我使用静态 DBContext 时会发生这种情况。如果我每次调用 API 时都创建一个新的 DBContext,那么 API 会返回我在表中键入的新数据。

标签: c# asp.net-mvc-4


【解决方案1】:

DbContext 不是线程安全的,因此将其设为静态对于服务器代码来说并不是一件好事。创建DbContext 的开销很低,所以我不明白为什么我们必须避免使其成为实例变量。

【讨论】:

    【解决方案2】:

    还应注意,Entity Framework 缓存数据。如果您直接在数据库中对缓存数据进行更改,Entity Framework 将不会看到这些更改,直到您创建新的 DbContext,或将底层 ObjectContext 告知Refresh

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2023-03-06
      相关资源
      最近更新 更多