我遇到了here所描述的确切问题(阅读“无法附加到已删除的MDF文件”部分),但问题的解决方案并未告知...
简而言之,问题是在删除.mdf
文件后,当我尝试使用EF 5.0访问数据库时,会抛出以下异常。
DataException-> EntityException-> SQLEXCEPTION:
无法将文件“{0}”附加为数据库“{1}”
我确实删除了DB文件,现在我在运行应用程序时遇到了令人讨厌的错误消息,期望它使用它的初始化程序。 有什么方法可以解决这个问题吗?
答案 0 :(得分:220)
如果删除了DB文件,它仍然会在SqlLocalDB中注册。有时它会修复它以删除数据库。您可以从命令行执行此操作。
运行以下命令:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
答案 1 :(得分:146)
对于那些仍在寻找解决方案的人......
转到View / SQL Server对象资源管理器并从(localdb)\ v11.0子节点中删除数据库!
本质上保留了文件所在位置的本地数据库,如果要删除数据库文件,请确保将其从此资源管理器实用程序中删除,而不是手动删除。
答案 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,并尝试删除该数据库:
然而它对我不起作用,当我尝试删除它时说“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