asp.net-mvc-3 - 管理开发和生产之间的 EF Code First 迁移

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

非常简短:

我正在基于 Ladislav Mrnka 的一篇文章在作为 Code First 构建的现有项目上实现 EF 迁移。

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

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

非常直接的过程,您可以在其中创建 $InitialMigration创建 __MigrationHistory table 。然后对您的模型进行任何更改,然后是任何 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          |
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+

最佳答案

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

Update-Database -Script

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

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

关于asp.net-mvc-3 - 管理开发和生产之间的 EF Code First 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565804/

相关文章:

asp.net-mvc-3 - Razor 生成单行文本

sql - 数据库 'master' 中的 CREATE DATABASE 权限被拒绝。 MVC EF 4.1 Codefirst 入门

code-first - 如何在 Entity Framework 4.3.1 中禁用迁移?

asp.net - 从 Team City 运行更新数据库

c# - 如何在 EF 4.3 中使用具有复杂键的 AddOrUpdate 播种数据

asp.net-mvc - 将用户代理保存到数据库以避免 SQL 注入(inject)?

javascript - MVC3 相对 URL 路径 - Javascript

c# - 如何使用 jqGrid 和文本框进行搜索?

c# - 如何正确使用 ValueGeneratedOnUpdate()?

entity-framework - Entity Framework : Using ExecuteSqlCommand to clear a table causes an exception because of the ObjectStateManager