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

非常简短:

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

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

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

非常简单的过程,您可以在其中创建一个创建__MigrationHistory表的$InitialMigration.然后,任何更新数据库都会对模型进行任何更改,以使数据库迁移.只要您有一组逻辑分组的模型更改,此过程就会循环.

查看__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表中的每条记录都应具有唯一的名称,时间戳无关紧要.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....