我遇到了 给你描述的确切问题(请阅读“无法附加到已删除的 MDF 文件”部分) ,但是这里没有说明问题的解决方案..。
简而言之,问题在于删除 .mdf文件后,当我试图使用 EF 5.0访问数据库时,会引发以下异常。
.mdf
DataException-> EntityException-> SqlException: 无法将文件“{0}”附加为数据库“{1}”
我确实删除了 DB 文件,现在我在运行应用程序时得到了这个讨厌的错误消息,期望它使用它的初始化器。 有办法解决吗?
好吧。
我的解决方案很简单,我改用本地服务器:
我将连接字符串中的 DataSource属性从:
DataSource
Data Source=(LocalDb)\v11.0;blah
致:
Data Source=.\SQLEXPRESS;blah
另一种解决方案是通过 SQLManagementStudio 登录到 LocalDb,然后尝试删除该数据库:
然而,它并不适合我,当我试图删除它时,它显示“标题: Microsoft SQL Server 管理工作室
服务器上不存在数据库“{0}”。(SqlManagerUI)
当我尝试分离它的数据库没有出现在列表中的分离选择,“采取脱机”也带我到上面的错误。
这让我认为这是 LocalDB 中的一个可靠错误。
对于那些仍在寻找解决方案的人来说。
转到 View/SQL Server Object Explorer 并从(localdb) v11.0子节点中删除数据库!
本质上,本地数据库保留了文件的位置,如果要删除数据库文件,请确保从这个资源管理器实用程序中删除这些文件,而不是手动删除。
如果删除 DB 文件,它仍然在 SqlLocalDB 中注册。有时它修复它删除数据库。您可以从命令行执行此操作。
运行以下命令:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
我也有同样的问题,我通过手动设置“ DataDirectory”文件夹到我的应用程序二进制文件夹中的另一个文件夹来解决它。
我将这一行放在 Global.asax Application _ Start 方法中:
AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));
我的连接字符串当前设置为:
<connectionStrings> <add name="DataContext" connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=DataContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|DataContext.mdf" providerName="System.Data.SqlClient" />
最简单最好的答案我刚刚解出来了, 只需使用 ursql 服务器名称作为数据源,初始目录作为数据库名称,然后删除 mdf 行
最简单的修复方法是在连接字符串中简单地更改数据库的名称。有关替代解决方案,请参阅 Rowan Miller 的博客 如何从 VisualStudio2012删除数据库。我们希望在将来的版本中解决这个问题。
我可以通过在连接 String 中重命名 DataBase 名称来修复它,从默认的 aspnet-{ number }到一个简单的名称,它工作了。
我确实首先尝试了 JSobell 的解决方案,但没有看到我的数据库列在那里。我从 VS 开发人员命令提示符运行 CodingWithSpike 的命令,但这也不起作用。最后,我在包管理器控制台上运行 CodingWithSpike 的相同命令,结果成功了。
PM> sqllocaldb.exe stop v11.0 LocalDB instance "v11.0" stopped. PM> PM> sqllocaldb.exe delete v11.0 LocalDB instance "v11.0" deleted. PM> sqllocaldb.exe start v11.0 LocalDB instance "v11.0" started.
使用 Sql 服务器管理工作室连接到(LocalDb) v11.0,删除 db,然后在包管理器控制台中执行 update-database。
在我的例子中,我使用迁移,在 config i 中,我只是改变了 dataContext 和 dataContext 类本身的名称(只是重命名) ,然后再试一次,这很有帮助
对于 SQL 2014,请按照 CodingWithSpike 选择的答案和此注释
顺便说一句,v11.0是特定于 SQL LocalDB 2012的 使用 LocalDB 2014,MS 将其重命名为 MSSqlLocalDb。- 14年8月29日19:20
我遇到了同样的问题。我在包管理器控制台中运行了以下命令,它修复了这个问题
sqllocaldb.exe stop MSSqlLocalDb sqllocaldb.exe delete MSSqlLocalDb