【问题标题】:Managing EF Code First Migrations between Development and Production管理开发和生产之间的 EF Code First 迁移
【发布时间】:2012-03-22 21:00:08
【问题描述】:

非常简短:

我正在基于Ladislav Mrnka 的文章构建为 Code First 的现有项目实施 EF 迁移

在已投入生产的项目上实施 EF 迁移时,如何在应用到开发的更新和为生产生成的脚本之间管理迁移脚本?

我感到困惑的原因是为每个脚本生成的 MigrationId 都附加了一个时间戳。在我的迁移尝试中,我注意到在 dev 和 prod 上的 __MigrationHistory 表中记录的条目是不同的,因此提出了一个问题,如果数据库要经历相当多的迁移升级,那么是否出于任何原因需要降级, 使用update-database -script创建脚本时,很难关联确切的 MigrationId


创建$InitialMigration 以创建__MigrationHistory 表的非常简单的过程。然后对您的模型进行任何更改,然后是任何update-database 以获取数据库迁移。只要您有一批按逻辑分组的模型更改,此过程就会循环。

查看__MigrationHistory 表显示

+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+
|            MigrationId             |        CreatedOn        |                              Model                               | ProductVersion |
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+
| 000000000000000_BootstrapMigration | 2012-03-01 17:40:39.567 | 0x1F8B08000000400ECBD07601C49...HASH_TRUNCATED...CA7F54A20F50000 | 4.3.1          |
| 201203011745335_AutomaticMigration | 2012-03-01 17:45:33.557 | 0x1F8B08000000400ECBD07601C49...HASH_TRUNCATED...F4AE3681EF50000 | 4.3.1          |
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+

【问题讨论】:

  • 您究竟是如何实现 prod 和 dev 数据库中的时间戳不同的?您是否使用数据库初始化程序进行数据库升级?
  • 最初,在稳定版本上启用迁移后,我运行 update-database 来创建带有 00_bootstrap 条目的迁移表。现在我更改了模型并运行Update-Database -Script 为生产数据库生成脚本,然后运行Update-Database 以迁移开发数据库。现在在 Prod DB 上执行上一步生成的 sql 会在 MigrationsHistory 表中创建一个条目为TIMESTAMP01_AutomaticMigration,而 Dev DB 上的后一个命令在 Dev DB 中插入了一个具有不同时间戳的条目,因为这两个命令是分开片刻。

标签: asp.net-mvc-3 ef-code-first entity-framework-4.3 entity-framework-migrations


【解决方案1】:

根据您的评论,解决方案看起来很简单。如果您想拥有相同的时间戳,您必须只使用一次Update-Database,在您的情况下,这意味着使用:

Update-Database -Script

并在两个数据库上执行创建的脚本。

无论如何,在我预计会降级的情况下,我可能不会使用自动迁移。对于每次迁移,我都会使用带有明确名称的基于代码的迁移。在这种情况下,MigrationHistory 表中的每条记录都应该有唯一的名称,而时间戳应该无关紧要。

【讨论】:

  • 啊,是的,同样的脚本方法很有意义!我昨天所做的是更深入地了解Add-Migration,并将适当的更改脚本创建为具有上下块的 c# 文件。 (blogs.msdn.com/b/adonet/archive/2012/02/09/…)。非常感谢您的洞察力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2021-08-30
  • 1970-01-01
  • 2016-12-18
相关资源
最近更新 更多