【问题标题】:Reset EF code-first database in LocalDB在 LocalDB 中重置 EF 代码优先数据库
【发布时间】:2012-07-03 16:37:03
【问题描述】:

我将 Entity Framework 5.0 RC 与预配置了 VS 2012 RC 的 LocalDB 数据库一起使用,用于代码优先数据库的一些原型设计和测试。

在更改我的代码优先数据库并运行“更新数据库”几个周期后,我进行了巨大的破坏性更改,自动迁移失败了。我不关心解决这个冲突,因为这只是原型设计,所以丢失数据很好。

如何重置或删除数据库? 重置还必须重置迁移表,这似乎在 Visual Studio 的服务器资源管理器中隐藏。

【问题讨论】:

  • 我发现了一些关于如何使 __MigrationHistory 表成为非系统表的文章,这反过来又允许我从服务器资源管理器中删除所有表和迁移历史记录。尽管如此,这并不是一种非常快速的重置方式,所以我对这里的想法持开放态度。我遇到的另一点是不使用我拥有的 AutomaticMigration。启用后,退出迁移错误会很痛苦,因为没有代码可以查看发生了什么。
  • 你可以通过设置初始化器Database.SetInitializer(new AlwaysRecreateDatabase<DataContext>());重新创建数据库
  • 谢谢,是的,我知道这一点,我认为我已经成功地在控制台应用程序中运行了该代码,只是为了清除所有内容。在需要重置数据库时,仍在寻找对团队中的每个人来说更容易做的事情,例如要执行的 SQL 脚本。

标签: c# entity-framework ef-code-first reset localdb


【解决方案1】:

在 Visual Studio 中删除整个数据库

  1. 打开 SQL Server 对象资源管理器
  2. 找到您正在使用的数据库右键单击并选择删除
  3. 选中两个复选框(删除备份和还原历史记录和关闭现有连接)并单击确定
  4. 再次运行程序,它应该重新创建数据库

【讨论】:

  • 这个问题已经有一段时间了,但是是的,这也是我目前用来重置数据库的方法。附带说明一下,我不确定这种情况何时发生变化,但在我最近的项目中,迁移历史表显然不再是系统表。
【解决方案2】:

到目前为止,这是我找到的最好的方法。

  1. 将 __MigrationHistory 设为非系统表。
  2. 执行 SQL 脚本删除所有表。

要更改 __MigrationHistory 表,请参阅 this article 以处理现有数据库和使用代码优先创建的新数据库。

SQL脚本如下:

EXEC sp_MSforeachtable @command1 = "DROP TABLE ?";

我正在使用Database .NET v4 Free 运行此 SQL 脚本,因为我的 Visual Studio 11 RC 副本由于某种原因不允许我在 LocalDB 上运行查询。此外,由于某些外键,我需要运行脚本两次以删除所有表。我没有费心解决这个问题,因为它似乎工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 2012-08-12
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多