【问题标题】:Create new database after deleting old Entity Framework generated database删除旧实体框架生成的数据库后创建新数据库
【发布时间】:2017-02-27 23:06:02
【问题描述】:

我已经使用下面的连接字符串使用代码优先方法和实体框架创建了一个简单的上下文。一切顺利,在运行测试方法后,我发现自己有一个 .mdf.ldf 文件。

"data source=.\SQLEXPRESS;Integrated Security=SSPI;database=testdb;AttachDBFilename=Q:\Temp\testdb.mdf;User Instance=true"

出于某种原因,我希望删除此数据库。我尝试在 SSMS 中查找数据库,但找不到。它没有在我的数据库中注册。现在我觉得我有 3 个选择:

  1. 在 SSMS 中附加数据库,然后将其删除

  2. 通过搜索.MDF文件连接到VS2015 Server Explorer中的数据库,然后从VS中删除数据库。

    通过服务器资源管理器添加数据库

    按下可在 SQL Server 对象资源管理器中浏览

    出现在我可以按删除的服务器对象资源管理器中

  3. 只需删除.mdf.ldf文件

这三种方法都删除了.mdf.ldf 文件。

但是:当我再次启动上下文时,我希望它会再次从头开始创建文件。但是我收到以下错误:

初始化数据库时发生异常。有关详细信息,请参阅 InnerException。

基础提供程序在打开时失败。
无法打开登录请求的数据库“testdb”。

登录失败。
用户“DESKTOP-XXXXXXX\XXXXX”登录失败。

我觉得我已经删除了对该数据库的所有引用。我找不到任何其他参考资料。然而不知何故,它似​​乎有一个,因为它正在尝试登录而不是创建一个新数据库。

问题:有人知道如何解决这个问题吗?如何正确删除数据库+引用?

更新

在删除文件之前的测试期间,在 VS 打开连接中,我看到以下连接字符串。

Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=Q:\Temp\testdb.mdf;Integrated Security=True;Connect Timeout=30

但是,在 VS2015 中探索我的 Localdb 时,没有列出任何数据库。

【问题讨论】:

  • 您现在列出了 2 个不同的连接字符串。你用的是哪一个? .\SQLEXPRESS 还是 localdb?
  • 我正在使用 .\SQLEXPRESS 进行初始化。当使用与数据库的实际连接时,我注意到连接字符串是 localdb。
  • 在选项 2 中,当您说连接到数据库并删除它时,您是在连接到 .\SQLEXPRESS 并删除数据库吗?
  • 我添加了选项 2 的屏幕截图。我认为它通过 (localdb)\MSSQLLocalDB
  • 用户 'DESKTOP-XXXXXXX\XXXXX' 是 SQL 服务器上 dbcreator 服务器角色或 sysadmin 服务器角色的成员吗?如果您手动创建一个空数据库并授予用户 'DESKTOP-XXXXXXX\XXXXX' DB_Owner 数据库角色的成员资格,会发生什么情况?

标签: c# entity-framework sql-server-express


【解决方案1】:

您能否尝试使用数据库初始化策略CreateDatabaseIfNotExists 显式初始化您的数据库。有点像..

public class YourDBContext: DbContext 
{

        public YourDBContext(): base("YourDBContextConnStr") 
        {
            Database.SetInitializer<YourDBContext>(new CreateDatabaseIfNotExists<YourDBContext>());

        }
}

干杯

【讨论】:

  • 我已经添加了初始化策略。错误仍然存​​在。
【解决方案2】:

由于我使用“.\SQLEXPRESS”进行初始化并且 EF 将其更改为“(LocalDB)\MSSQLLocalDB”这一事实触发了我已经更改了连接字符串。

"data source=(LocalDB)\MSSQLLocalDB;Integrated Security=SSPI;database=testdb;AttachDBFilename=Q:\Temp\testdb.mdf");   

等等,瞧。在我的连接字符串中使用 SQL Express LocalDB 作为数据源,我现在可以无意识地删除和重新创建数据库。此外,数据库现在可以正确显示在我的 LocalDb 下的 SQL Server 对象资源管理器中(而不是根本不显示在任何地方)。

我仍然不知道为什么它最初可以使用“.\SQLEXPRESS”连接字符串创建但不能重新创建。好像它在某个地方隐藏了 .mdf 数据库存在的信息,并且总是试图重新连接到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 2015-03-28
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多