我遇到了这里描述的确切问题(阅读“无法附加到已删除的 MDF 文件”部分),但那里没有告诉问题的解决方案......
简而言之,问题是删除.mdf
文件后,当我尝试使用 EF 5.0 访问数据库时会引发以下异常。
DataException->EntityException->SqlException:
无法将文件“{0}”附加为数据库“{1}”
我确实删除了 DB 文件,现在在运行应用程序时收到令人讨厌的错误消息,期望它使用它的初始化程序。有任何解决这个问题的方法吗?
我遇到了这里描述的确切问题(阅读“无法附加到已删除的 MDF 文件”部分),但那里没有告诉问题的解决方案......
简而言之,问题是删除.mdf
文件后,当我尝试使用 EF 5.0 访问数据库时会引发以下异常。
DataException->EntityException->SqlException:
无法将文件“{0}”附加为数据库“{1}”
我确实删除了 DB 文件,现在在运行应用程序时收到令人讨厌的错误消息,期望它使用它的初始化程序。有任何解决这个问题的方法吗?
如果您删除 DB 文件,它仍会在 SqlLocalDB 中保持注册状态。有时它会修复它以删除数据库。您可以从命令行执行此操作。
运行以下命令:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
对于那些仍在寻找解决方案的人...
转到查看/SQL Server 对象资源管理器并从 (localdb)\v11.0 子节点中删除数据库!
基本上有一个本地数据库保留了文件的位置,如果要删除数据库文件,请确保从该资源管理器实用程序中删除它们,而不是手动删除。
我确实先尝试了 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.
好的。
我的解决方案很简单,我改为使用本地服务器:
我将DataSource
连接字符串中的属性更改为:
Data Source=(LocalDb)\v11.0;blah
到:
Data Source=.\SQLEXPRESS;blah
另一种解决方案是通过 SQL Management Studio 登录 LocalDb,然后尝试删除该数据库:
但是它对我不起作用,当我尝试删除它时,它显示“TITLE:Microsoft SQL Server Management Studio
服务器上不存在数据库“{0}”。(SqlManagerUI)
当我尝试分离它时,数据库没有出现在分离选择列表中,“脱机”也将我带到上面的错误。
这使我认为这是 LocalDB 中的一个可靠错误。
最简单的解决方法是简单地更改连接字符串中的数据库名称。有关替代解决方案,请参阅 Rowan Millers 博客如何从 Visual Studio 2012 中删除数据库。我们希望在未来的版本中解决这个问题。
最好和最简单的答案我现在刚刚解决了,只需使用您的 sql 服务器名称作为数据源,初始目录是您的数据库名称,然后您就可以删除 mdf 行
在我的情况下,我使用迁移并且在配置中我只是更改了 dataContext 和 dataContext 类本身的名称(只是重命名),然后再试一次,这有帮助
对于 SQL 2014,请遵循 CodingWithSpike 选择的答案和此评论
作为旁注,v11.0 特定于 SQL LocalDB 2012。如果您使用的是 LocalDB 2014,MS 将其重命名为MSSqlLocalDb。– CodingWithSpike 2014 年 8 月 29 日 19:20
我有同样的问题。我在包管理器控制台中运行了以下命令,它解决了问题
sqllocaldb.exe stop MSSqlLocalDb
sqllocaldb.exe delete MSSqlLocalDb
我有同样的问题,我通过手动将“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" />
我可以通过在我的连接字符串中重命名数据库名称来修复它,从默认的 aspnet-{numbers} 到一个简单的名称,它可以工作。
使用 Sql server management studio 连接到 (LocalDb)\v11.0,删除数据库,然后在包管理器控制台中执行更新数据库。