【发布时间】:2012-11-13 22:27:19
【问题描述】:
如果我使用 Internet 应用程序项目模板(使用表单身份验证)创建一个新的 MVC4 Web 应用程序,那么当我第一次运行它并单击注册时,调用 context.Database.Exists(在 InitializeSimpleMembershipAttribute 过滤器中) 正确检测到数据库文件不存在,调用ObjectContext.CreateDatabase,在App_Data文件夹中创建dbf和ldf文件。
如果我随后删除 dbf 和 ldf 文件并再次运行应用程序,则对 context.Database.Exists 的调用将返回 true,尽管事实上数据库文件已消失。这种行为似乎是持久的:一旦 ObjectContext.CreateDatabase 被调用,一些魔法似乎会记住数据库“存在”,即使物理文件已经消失,即使我重新启动 PC。
好的,所以我假设 SQL Server 中的某些东西正在记住数据库的存在。所以我已经安装并运行了 SQL Server Management Studio。但是,\SQLEXPRESS 节点下的 Databases 文件夹下唯一出现的是 System Databases 文件夹。我看不到我的数据库文件连接的迹象。
这是怎么回事?为什么 context.Database.Exist 返回 true,如果数据库文件消失了,我如何说服它返回 false?为什么我在 SQL Server Management Studio 中看不到数据库连接的一些证据?
鲍勃
【问题讨论】:
-
可能是您没有查看正确的数据库吗?是VS 2012吗?如果是这样,它可能是 (localdb)\v11.0 而不是 .\SqlExpress。 context.Database.Connection.ConnectionString 会告诉你真相。
-
如果你这样做了
Database.Delete和Database.Create,文件是否又回到了 App_Data 文件夹中? -
是的,它是 (localdb),而不是 SQLEXPRESS。这回答了部分谜团。那么,我可以使用 SQL Studio 之类的工具来检查和/或清理悬空的数据库引用,还是需要编写代码(Database.Delete)?
标签: sql-server asp.net-mvc entity-framework