我使用以下连接字符串使用实体框架的代码优先方法创建了一个简单的上下文。一切顺利,运行测试方法后,我发现自己有一个.mdf
和.ldf
文件。
"data source=.\SQLEXPRESS;Integrated Security=SSPI;database=testdb;AttachDBFilename=Q:\Temp\testdb.mdf;User Instance=true"
出于某种原因,我希望删除此数据库。我试图在SSMS中寻找数据库,但我找不到它。它未在我的数据库下注册。现在我觉得我有3个选择:
将数据库附加到SSMS中,然后将其删除
通过搜索.MDF
文件,然后从VS中删除数据库,连接到VS2015 Server Explorer中的数据库。
通过服务器资源管理器添加数据库
按下以在SQL Server对象资源管理器中浏览
出现在服务器对象资源管理器中,我可以按删除
只需删除.mdf
和.ldf
文件
这三种方法都删除了.mdf
和.ldf
个文件。
HOWEVER :当我再次启动上下文时,我希望它能够从头开始重新创建文件。但是我收到以下错误:
初始化数据库时发生异常。有关详细信息,请参阅InnerException。
底层提供商在Open上失败 无法打开登录请求的数据库“testdb”。
登录失败。
用户'DESKTOP-XXXXXXX \ XXXXX'登录失败。
我觉得我删除了对这个数据库的每个引用。我找不到任何其他参考资料。但不知何故,似乎有一个因为它试图登录而不是创建一个新的数据库。
问题:有谁知道如何解决这个问题?如何正确删除数据库+参考?
更新:
在我测试期间的VS打开连接中,在删除文件之前,我看到以下连接字符串。
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=Q:\Temp\testdb.mdf;Integrated Security=True;Connect Timeout=30
但是,在VS2015中浏览我的Localdb时,没有列出数据库。
答案 0 :(得分:0)
您可以尝试使用Db初始化策略CreateDatabaseIfNotExists
显式初始化Db。有点像..
public class YourDBContext: DbContext
{
public YourDBContext(): base("YourDBContextConnStr")
{
Database.SetInitializer<YourDBContext>(new CreateDatabaseIfNotExists<YourDBContext>());
}
}
干杯
答案 1 :(得分:0)
由于我使用“。\ SQLEXPRESS”初始化并且EF将其更改为“(LocalDB)\ MSSQLLocalDB”这一事实触发了我已经更改了连接字符串。
"data source=(LocalDB)\MSSQLLocalDB;Integrated Security=SSPI;database=testdb;AttachDBFilename=Q:\Temp\testdb.mdf");
Et瞧。在我的connectionstring中使用SQL Express LocalDB作为数据源我现在可以盲目地删除和重新创建数据库。此外,数据库现在正确地显示在我的SQL Server对象资源管理器中的LocalDb下(而不是根本不显示在任何地方)。
我仍然不知道为什么它最初可以使用“。\ SQLEXPRESS”连接字符串创建,但不能重新创建。好像它隐藏了.mdf数据库存在的信息,并且总是试图重新连接它。