141

我遇到了这里描述的确切问题(阅读“无法附加到已删除的 MDF 文件”部分),但那里没有告诉问题的解决方案......

简而言之,问题是删除.mdf文件后,当我尝试使用 EF 5.0 访问数据库时会引发以下异常。

DataException->EntityException->SqlException:
无法将文件“{0}”附加为数据库“{1}”

我确实删除了 DB 文件,现在在运行应用程序时收到令人讨厌的错误消息,期望它使用它的初始化程序。有任何解决这个问题的方法吗?

4

12 回答 12

223

如果您删除 DB 文件,它仍会在 SqlLocalDB 中保持注册状态。有时它会修复它以删除数据库。您可以从命令行执行此操作。

  1. 在开始/程序菜单下打开“VisualStudio 的开发人员命令提示符”。
  2. 运行以下命令:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

于 2013-05-02T13:22:58.633 回答
148

对于那些仍在寻找解决方案的人...

转到查看/SQL Server 对象资源管理器并从 (localdb)\v11.0 子节点中删除数据库!
在此处输入图像描述

基本上有一个本地数据库保留了文件的位置,如果要删除数据库文件,请确保从该资源管理器实用程序中删除它们,而不是手动删除。

于 2013-04-05T11:00:43.503 回答
19

我确实先尝试了 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.
于 2014-06-25T20:42:15.100 回答
9

好的。

我的解决方案很简单,我改为使用本地服务器:

我将DataSource连接字符串中的属性更改为:

Data Source=(LocalDb)\v11.0;blah

到:

Data Source=.\SQLEXPRESS;blah

另一种解决方案是通过 SQL Management Studio 登录 LocalDb,然后尝试删除该数据库:

在此处输入图像描述

但是它对我不起作用,当我尝试删除它时,它显示“TITLE:Microsoft SQL Server Management Studio

服务器上不存在数据库“{0}”。(SqlManagerUI)

当我尝试分离它时,数据库没有出现在分离选择列表中,“脱机”也将我带到上面的错误。

这使我认为这是 LocalDB 中的一个可靠错误。

于 2012-11-09T08:17:24.563 回答
4

最简单的解决方法是简单地更改连接字符串中的数据库名称。有关替代解决方案,请参阅 Rowan Millers 博客如何从 Visual Studio 2012 中删除数据库。我们希望在未来的版本中解决这个问题。

于 2013-09-30T17:53:56.720 回答
2

最好和最简单的答案我现在刚刚解决了,只需使用您的 sql 服务器名称作为数据源,初始目录是您的数据库名称,然后您就可以删除 mdf 行

于 2013-07-17T12:53:06.393 回答
1

在我的情况下,我使用迁移并且在配置中我只是更改了 dataContext 和 dataContext 类本身的名称(只是重命名),然后再试一次,这有帮助

于 2015-11-27T05:46:22.317 回答
1

对于 SQL 2014,请遵循 CodingWithSpike 选择的答案和此评论

作为旁注,v11.0 特定于 SQL LocalDB 2012。如果您使用的是 LocalDB 2014,MS 将其重命名为MSSqlLocalDb。– CodingWithSpike 2014 年 8 月 29 日 19:20

于 2017-03-22T14:52:15.877 回答
1

我有同样的问题。我在包管理器控制台中运行了以下命令,它解决了问题

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
于 2018-07-11T16:32:09.033 回答
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" />

于 2013-05-22T16:25:47.590 回答
0

我可以通过在我的连接字符串中重命名数据库名称来修复它,从默认的 aspnet-{numbers} 到一个简单的名称,它可以工作。

于 2014-03-27T19:19:40.200 回答
0

使用 Sql server management studio 连接到 (LocalDb)\v11.0,删除数据库,然后在包管理器控制台中执行更新数据库。

于 2014-06-28T19:03:54.613 回答