非常简短:
我正在基于Ladislav Mrnka
的文章对基于Code First构建的现有项目实施EF迁移在已投入生产的项目中实施EF迁移时,如何在应用于Development的更新与生成的Scripts之间管理迁移脚本?
我感到困惑的原因是为每个脚本生成的MigrationId都附加了一个TimeStamp。在我的迁移尝试中,我注意到在dev和prod的__MigrationHistory表中记录的条目是不同的,因此提出了一个问题,如果数据库要经历相当多的迁移升级,那么是否因为任何原因需要降级,使用update-database -script
非常直接的过程,您可以在其中创建$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 |
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+
答案 0 :(得分:3)
根据您的评论,看起来解决方案是直截了当的。如果您想拥有相同的时间戳,则必须仅使用Update-Database
一次,在您的情况下,这意味着使用:
Update-Database -Script
并在两个数据库上执行创建的脚本。
无论如何,我可能不会在我希望降级的情况下使用自动迁移。我会为每次迁移使用带有显式名称的基于代码的迁移。在这种情况下,MigrationHistory
表中的每个记录都应该具有唯一的名称,时间戳无关紧要。