非常简要地之间管理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 |
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+
您是如何实现prod和dev数据库中的时间戳是不同的?你使用数据库初始化器进行数据库升级吗? – 2012-03-05 21:06:13
最初,在稳定版本上启用迁移后,我运行'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