4

非常简短:

我正在根据Ladislav Mrnka的文章在现有项目上实施 EF 迁移,该项目以 Code First 的形式构建

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

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


非常直接的过程,您可以在其中创建$InitialMigration创建表的__MigrationHistory表。然后对您的 Model 进行任何更改以update-database获取数据库Migrated。每当您有一批按逻辑分组的模型更改时,此过程就会循环。

__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          |
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+
4

1 回答 1

3

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

Update-Database -Script

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

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

于 2012-03-06T11:35:59.110 回答