0

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

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

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

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

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

4

2 回答 2

3

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

于 2013-06-18T16:08:07.760 回答
1

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

于 2013-06-18T17:59:10.173 回答