C# EF在某些情况下保留旧值

C# EF在某些情况下保留旧值,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,当使用实体框架时,当从一些表/视图中读取数据时,我似乎得到了旧数据。我的意思是,外部进程改变了数据 在运行代码时,我看到EF构建并运行(使用探查器)SQL查询来检索数据,但是旧值最终会出现在对象中 更让我困惑的是,并不是所有的表/视图都会发生这种情况,但对于它确实起作用的表/视图,它是一致的 如果我重新启动IIS,我会得到正确的结果,因此很明显这些值被保存在某个地方 是什么导致了这种选择性数据缓存?我如何影响它?当您使用相同的ObjectContext实例时,这是正常的。使其寿命尽可能短。每个请

当使用实体框架时,当从一些表/视图中读取数据时,我似乎得到了旧数据。我的意思是,外部进程改变了数据

在运行代码时,我看到EF构建并运行(使用探查器)SQL查询来检索数据,但是旧值最终会出现在对象中

更让我困惑的是,并不是所有的表/视图都会发生这种情况,但对于它确实起作用的表/视图,它是一致的

如果我重新启动IIS,我会得到正确的结果,因此很明显这些值被保存在某个地方


是什么导致了这种选择性数据缓存?我如何影响它?

当您使用相同的
ObjectContext
实例时,这是正常的。使其寿命尽可能短。每个请求的实例应该可以。

您的问题是什么?您所说的“旧值在对象中结束”是什么意思?你说的是重新启动IIS,这让我相信你有一个web应用程序。这是真的吗?如果是的话,你是在用Internet Explorer测试它吗?是的,是在web应用程序中,在chrome中测试。重新启动IIS Express VS将启动。旧值是指以前在表列中的值。是的,我更关心的是“对象”部分。当你在本地运行你的应用程序时,你能重现这一点吗?您的数据是否确实正确地从数据库中提取?您需要查看谁在缓存您的数据:数据库服务器、web应用程序或浏览器。仅仅因为您看到了正确的查询,并不意味着您将获得预期的数据。正如我所说,所有其他表/视图都很好,数据正在外部更新,应用程序通过查看更改做出响应。SQL事件探查器显示EF读取数据,当我自己运行EF SQL时,它会返回正确的值(现在更改的值),只是当我到达我的项目时,旧的值已经存在了。实际上我想我明白了你的意思。应用程序以正确的值启动,然后在我强制应用程序重新启动之前不会更改,这意味着每个请求的实例对于这些请求来说并不完整。“SQL Profiler显示EF读取数据,当我自己运行EF SQL时,它会返回正确的值(现在更改的值)”仅供参考:这并不意味着缓存的实体会被更新(对不起,这就是上下文的工作方式…)