4

非常简要地之间管理EF的Code First迁移:通过Ladislav Mrnka开发和生产

当实现在EF迁移

我是基于文章建成的Code First现有项目实施EF迁移项目已投入生产,如何在应用于开发的更新和为生产生成的脚本之间管理迁移脚本?

我感到困惑的原因是,为每个脚本生成的MigrationId都附加了TimeStamp。在我的迁移尝试中,我注意到在dev和prod的__MigrationHistory表中记录的条目是不同的,因此引发了一个问题,如果数据库要经历不少迁移升级,那么如果因任何原因需要降级,这将是非常困难的合作涉及的具体MigrationId使用update-database -script


非常简单的过程,你创建一个用于创建__MigrationHistory表中$InitialMigration创建脚本。然后,对模型所做的任何更改都会被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   | 
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+ 
+0

您是如何实现prod和dev数据库中的时间戳是不同的?你使用数据库初始化器进行数据库升级吗? – 2012-03-05 21:06:13

+0

最初,在稳定版本上启用迁移后,我运行'update-database'来创建带有00_bootstrap条目的迁移表。现在我改变了模型并运行'Update-Database -Script'来生成Production DB的脚本,然后使用'Update-Database'来获得Dev DB的迁移。现在执行Prod DB上前面步骤生成的sql会在MigrationsHistory表中创建一个条目作为'TIMESTAMP01_AutomaticMigration',而Dev DB上的后续命令会在Dev DB中插入一个具有不同TimeStamp的条目,因为2条命令是运行一段时间。 – bPratik 2012-03-06 01:13:44

回答

3

根据您的评论它看起来像解决方案是直线前进。如果你想有相同的时间戳必须使用Update-Database只有一次,在你的情况下,它意味着使用:

Update-Database -Script 

和执行创建的脚本在这两个数据库。

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

+0

啊,是的,同样的脚本方法很有意义!我昨天所做的事更深入地讨论了“添加迁移”,并创建了适当的变更脚本作为带有向上和向下块的c#文件。 (http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx)。 非常感谢您的洞察力! – bPratik 2012-03-06 13:59:37