我遇到了此处所述的确切问题(请参阅“无法附加到已删除的MDF文件”部分),但是在那里没有告诉您解决问题的方法...
简而言之,问题在于删除.mdf
文件后,当我尝试使用EF 5.0访问数据库时会引发以下异常。
DataException-> EntityException-> SqlException:
无法将文件“ {0}”作为数据库“ {1}”附加
我确实删除了数据库文件,现在在运行应用程序时希望它使用其初始化程序时收到该讨厌的错误消息。有任何解决这个问题的方法吗?
我遇到了此处所述的确切问题(请参阅“无法附加到已删除的MDF文件”部分),但是在那里没有告诉您解决问题的方法...
简而言之,问题在于删除.mdf
文件后,当我尝试使用EF 5.0访问数据库时会引发以下异常。
DataException-> EntityException-> SqlException:
无法将文件“ {0}”作为数据库“ {1}”附加
我确实删除了数据库文件,现在在运行应用程序时希望它使用其初始化程序时收到该讨厌的错误消息。有任何解决这个问题的方法吗?
Answers:
如果删除该数据库文件,它仍然保持在SqlLocalDB的注册状态。有时它会修复它以删除数据库。您可以从命令行执行此操作。
运行以下命令:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
v11.0
特定于SQL LocalDB2012。如果使用的是LocalDB 2014,MS会将其重命名为MSSqlLocalDb
。
对于那些仍在寻找解决方案的人...
转到“查看/ SQL Server对象资源管理器”,然后从(localdb)\ v11.0子节点中删除数据库!
本质上是保留了应保存文件位置的本地数据库,如果要删除数据库文件,请确保将其从此资源管理器实用程序中删除,而不是手动删除。
我确实首先尝试了JSobell的解决方案,但没有在其中列出我的数据库。我从VS Developer Command Prompt运行了CodingWithSpike的命令,但是那也不起作用。最后,我从Package Manager控制台运行了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.
好的。
我的解决方案很简单,我更改为使用本地服务器:
我DataSource
将连接字符串中的属性更改为:
Data Source=(LocalDb)\v11.0;blah
至:
Data Source=.\SQLEXPRESS;blah
另一个解决方案是通过SQL Management Studio登录到LocalDb,然后尝试删除该数据库:
但是,它对我不起作用,当我尝试将其删除时,它显示“标题:Microsoft SQL Server Management Studio
服务器上不存在数据库“ {0}”。(SqlManagerUI)
当我尝试分离它时,数据库没有出现在分离选择列表中,“脱机”也将我带到上面的错误。
这使我认为这是LocalDB中的可靠错误。
最简单的解决方法是仅在连接字符串中更改数据库的名称。有关替代解决方案,请参见Rowan Millers博客如何从Visual Studio 2012中删除数据库。我们希望在以后的版本中解决此问题。
我遇到了同样的问题,我通过将“ 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" />
DataDirectory
已经设置为本地App_Data
,所以除非之前进行了明确更改,否则您的代码将不执行任何操作。
我可以通过重命名连接字符串中的数据库名称(从默认的aspnet- {numbers}到一个简单的名称)来解决该问题。