代码首先部署在生产环境中

Code first deploy on production

我的 DEV PC 上有产品数据库和代码的副本。

在生产中,我在系统表中看到 _MigrationHistory 中存在 8 条迁移记录。 (第一版的code和deploy是另外一个人写的)。

我需要添加一些新表和代码才能使用它们 - 模型和控制器。我可以为新表添加新模型并为控制器添加代码。

在 DEV PC 上我可以启动命令

add-migration myNewMigration

update-database with option "-script"

没有它就无法在我的 DEV 数据库中获取表和在生产环境中执行的脚本。

为了部署,我需要将 bin 文件夹中的内容和 Prod 上的新视图复制到 运行 SQL 脚本以在数据库中创建新表。

我想知道这是否足够,因为目前我在系统表 - _MigrationHistory 中看到我的 DEV 环境中所有迁移的对应记录在生产环境中的记录。

如果我只运行 PROD 上的SQL 脚本可能是此操作的新记录将不会出现在_MigrationHistory 中。所以可能是因为模型不同而出现错误并且在部署后出现任何问题的原因。

在更改生产数据库之前,请确保您有一个完整的备份。

I was wondering is that enough because at the moment I see records for all migrations in my Dev environment corresponding records in Production environment in system tables - _MigrationHistory

如果您 运行 开发环境中的代码,它将应用您的显式迁移。

如果我正确理解您的评论,您会在 DEV 和 PROD 中看到相同的迁移。如果那是准确的,那么 PROD 可能是最新的。

查看项目中的 Migrations 文件夹。在那里您将看到完整的迁移列表,每个迁移都在其自己的 .cs 文件中(加上相关的 .Designer.cs 和 .resx 文件)。将您在 DEV 和 PROD 中看到的内容与 __MigrationHistory 中的迁移列表进行比较,以了解完整的迁移集及其应用位置。

If I only run sql script on Prod may be new record for this operation will not appear in _MigrationHistory

查看您的迁移脚本。他们将适当的条目插入 __MigrationHistory 所在的位置 运行(包括在生产中)。这是我的一个项目中经过编辑的示例:

INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion]) VALUES (N'201409082209285_VDisposer', N'Survey.Model.Migrations.MembershipConfiguration.MembershipConfiguration', 0x1F8B0800000...1A0200 , N'6.1.1-30610')

So could be that a reason to get error that model is different and to have any problem after deploy

如果您遇到模型与数据库不匹配的错误,还有其他原因。

以下是我缩小分歧的建议:

  1. 备份您的生产数据库。
  2. 在你的DEV环境中恢复(使用与你常用的DEV数据库不同的名称,或者先备份你的DEV数据库。如果使用不同的名称,请记住暂时将web.config更改为新数据库)。
  3. 创建一个新的迁移。
  4. 查看为新迁移生成的代码。它将指出 PROD 中的内容与 DEV 中的状态之间的差异。

记得在完成后撤消对 web.config 的更改。