环境:
- 视窗 8.1
- 视觉工作室 2013
- 项目类型:ASP.NET MVC
- 在 IIS Express 中进行调试。
- 点网:4.5
- 数据库:SQLExpress 2012
- 实体框架 5
当我在调试或发布配置中运行我的解决方案 (F5) 时,我可以毫无问题地通过 EF 操作数据;数据更改在视图之间持续存在。但是,如果我在 Management Studio 中查询数据库,则没有任何更新反映在其中。如果我在 Management Studio 中更新记录,这些更改也不会反映在我正在运行的解决方案中。
如果我然后停止并重新启动,甚至只是停止并在 VS 中进行构建(CTRL、SHIFT、B),我在 Web 应用程序中的数据都会通过 Management Studio 恢复到与我的数据库匹配的状态。
如果我向数据库添加跟踪,我可以看到读取,但没有写入通过数据库。此外,如果我停止 SQLExpress 服务,我的页面会抛出“SQL Server 服务已暂停/停止”异常。奇怪的是,它看起来像是从正确的数据库中读取,但可能正在写入某个地方的开发缓存?
这让我认为,在每次构建中,数据库的副本都被用于调试/运行会话的状态。
那么问题就变成了,这是在哪里设置的,临时数据库在哪里?我已经搜索了我的 web.config、web.debug.config、web.release.config,但是没有对备用数据库的引用。
我查看了 /App_Data 和 /bin 文件夹,但那里也没有额外的数据库。我什至使用 procmon 观察文件系统,以查看 VS 通过构建执行的任何文件操作,但我找不到任何值得注意的东西(有大量数据,所以可能遗漏了一些东西)。
我有几个调试语句吐出 EF 正在使用的连接字符串,并且可以确认它指向正确的 SQLExpress 实例。
System.Diagnostics.Debug.WriteLine("Conn String: " + ctx.Database.Connection.ConnectionString);
唯一的另一种可能性是 EF 突然持有一个大缓存。我对此表示怀疑,因为我经常跟踪数据库并且更新通常会立即发生。
这种行为相对较新,但不知道它是什么时候开始的。唯一的重大变化是从 2012 年到 2013 年的 VS 升级,但不能确定它是否与升级相关。
无论如何,我现在已经走到了尽头,并且希望有任何我可以遵循的建议。