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

时间:2012-11-07 17:34:13

标签: sql-server asp.net-mvc visual-studio-2012 entity-framework-5 localdb

我遇到了here所描述的确切问题(阅读“无法附加到已删除的MDF文件”部分),但问题的解决方案并未告知...

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

  

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

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

12 个答案:

答案 0 :(得分:220)

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

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

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

答案 1 :(得分:146)

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

转到View / SQL Server对象资源管理器并从(localdb)\ v11.0子节点中删除数据库!
enter image description here

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

答案 2 :(得分:19)

我首先尝试了JSobell的解决方案,但没有看到我的数据库列在那里。我从VS Developer Command Prompt运行了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.

答案 3 :(得分:9)

好的。

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

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

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

要:

Data Source=.\SQLEXPRESS;blah

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

enter image description here

然而它对我不起作用,当我尝试删除它时说“TITLE:Microsoft SQL Server Management Studio

  

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

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

这让我觉得这是LocalDB中的一个可靠错误。

答案 4 :(得分:4)

最简单的解决方法是简单地在连接字符串中更改数据库的名称。有关其他解决方案,请参阅Rowan Millers博客How to Drop a Database from Visual Studio 2012。我们希望在将来的版本中解决这个问题。

答案 5 :(得分:2)

我刚解决的最好和最简单的答案, 只需使用您的sql server名称作为数据源,初始目录是您的数据库名称,然后去除mdf行

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

  

作为旁注,v11.0特定于SQL LocalDB 2012.如果您是   使用LocalDB 2014,MS将其重命名为 MSSqlLocalDb 。 -   CodingWithSpike Aug 29' 14 at 19:20

答案 8 :(得分:0)

我遇到了同样的问题,我通过手动将“DataDirectory”文件夹设置到我的app二进制文件中的另一个文件夹来解决了这个问题。

我将此行放在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" />

答案 9 :(得分:0)

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

答案 10 :(得分:0)

使用Sql server management studio连接到(LocalDb)\ v11.0,删除db,然后在包管理器控制台中执行update-database。

答案 11 :(得分:0)

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

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
相关问题