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

我遇到了这里描述的确切问题(请参阅“无法附加到已删除的MDF文件”一节),但是没有告诉问题的解决scheme…

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

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

我没有删除数据库文件,现在当运行应用程序期望它使用它的初始化程序时,我得到了令人讨厌的错误消息。 任何方法来解决这个问题?

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

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

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

对于那些仍然在寻找解决scheme…

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

本质上有一个本地数据库保留文件的位置,如果你想删除数据库文件,确保你从这个浏览器工具中删除它们,而不是手动。

我确实先尝试了JSobell的解决scheme,但没有看到我的数据库在那里列出。 我从VS Developer Command Prompt运行了CodingWithSpike的命令,但是这也不起作用。 最后,我从软件包pipe理器控制台运行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. 

好的。

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

我改变了连接string中的DataSource属性:

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

至:

 Data Source=.\SQLEXPRESS;blah 

另一种解决scheme是通过SQL Management Studiologin到LocalDb,并尝试删除该数据库:

在这里输入图像描述

然而,它并没有为我工作,当我试图删除它说:“标题:Microsoft SQL Serverpipe理工作室

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

当我尝试分离它时,数据库不会出现在分离select列表中,“离线”也将我带到上面的错误。

这导致我认为这是在LocalDB中的一个可靠的错误。

最简单的解决方法是简单地在连接string中更改数据库的名称。 请参阅Rowan Millers博客如何从Visual Studio 2012中删除数据库以获取备用解决scheme。 我们希望在未来的版本中解决这个问题。

最好的和简单的答案我现在刚刚解决它,只需使用您的SQL服务器名称作为数据源,初始目录是您的数据库名称,在那里你去除MDF线

在我的情况下,我使用迁移,并在configuration我只是改变dataContext和dataContext类本身的名称(只是重命名),然后再试一次,这有助于

对于SQL 2014,请按照CodingWithSpikeselect的答案和此评论

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

我有同样的问题,我通过手动设置“DataDirectory”文件夹到我的应用程序二进制文件中的另一个文件夹解决它。

我把这一行放在Global.asax Application_Start方法中:

 AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data")); 

我的连接string当前设置为:

 <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" /> 

我可以通过重命名我的连接string中的DataBase名称,从默认的aspnet- {数字}到一个简单的名称,它的工作。

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