代码首先部署在生产上

时间:2015-03-16 17:55:29

标签: entity-framework deployment ef-code-first ef-migrations

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

在生产中,我在系统表中看到_MigrationHistory中存在8个迁移记录。 (代码和部署的第一个版本是由另一个人编写的)。

我需要添加一些新表和代码来与它们一起工作 - 模型和控制器。我可以为新表和控制器代码添加新模型。

在DEV PC上我可以启动命令

  

add-migration myNewMigration

  

update-database with option" -script"

并且没有它来获取我的DEV DB和脚本中的表以在Production上执行。

对于部署,我需要复制关于Prod的bin文件夹和新视图的内容,并运行SQL脚本以在DB中创建新表。

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

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

1 个答案:

答案 0 :(得分:0)

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

  

我很想知道这已经足够了,因为目前我在Dev环境中看到所有迁移的记录,系统表中生产环境中的相应记录 - _MigrationHistory

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

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

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

  

如果我只在Prod上运行sql脚本,那么此操作的新记录将不会出现在_MigrationHistory

查看您的迁移脚本。它们将相应的条目插入到运行它们的__MigrationHistory中(包括在生产中)。这是我的一个项目的编辑示例:

  

INSERT [dbo]。[__ MigrationHistory]([MigrationId],[ContextKey],[Model],[ProductVersion])   价值观(N' 201409082209285_VDisposer',N' Survey.Model.Migrations.MembershipConfiguration.MembershipConfiguration',0x1F8B0800000 ... 1A0200,N' 6.1.1-30610')

     

因此可能是获得错误的原因,即模型不同并且在部署之后出现任何问题

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

我建议缩小差异:

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

相关问题