EF5: 无法将文件“{0}”作为数据库“{1}”附加到该文件

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

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

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

我确实删除了 DB 文件,现在我在运行应用程序时得到了这个讨厌的错误消息,期望它使用它的初始化器。 有办法解决吗?

61171 次浏览

好吧。

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

我将连接字符串中的 DataSource属性从:

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

致:

Data Source=.\SQLEXPRESS;blah

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

enter image description here

然而,它并不适合我,当我试图删除它时,它显示“标题: Microsoft SQL Server 管理工作室

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

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

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

对于那些仍在寻找解决方案的人来说。

转到 View/SQL Server Object Explorer 并从(localdb) v11.0子节点中删除数据库!
enter image description here

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

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

  1. 在开始/程序菜单下打开“ Developer Command Prompt for VisualStudio”。
  2. 运行以下命令:

    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