我正在开发一个使用 EF6 和代码优先迁移的项目。 迄今为止的所有工作都是在Dev上完成的。环境,包括数据库迁移。
我需要将代码部署到另一个环境(QA),但是我偶然发现了一个问题:
数据库存在,但没有表(我手动创建了数据库)。
目前,QA中的代码抛出Invalid object name 'dbo.__MigrationHistory'.
并且真正在QA中不存在此表,它仅存在于首次启用迁移的DEV中。
在多个开发环境(DEV => QA => STG => PROD
)中使用迁移的最佳做法是什么?
我最好的行动方式是什么?
更新:
我手动创建了dbo.__MigrationHistory
和模式,并从DEV表中填充了迁移表。问题仍然存在,因为我将在本月晚些时候部署到STG和PROD。
答案 0 :(得分:1)
如果您使用某种持续集成,您可以按以下步骤操作:
如果您没有执行CI,那么您可以按照第一步进行操作,并始终使用使用相应构建配置构建的迁移项目进行部署。 注意:手动搞乱__MigrationHistory表永远不是好习惯。
要创建数据库,您可以使用CreateDatabaseIfNotExists
初始值设定项。
答案 1 :(得分:0)
您可以尝试一些选项:
1-使用数据库初始化程序:
Database.SetInitializer<UserDbContext>(new MigrateDatabaseToLatestVersion<UserDbContext, Configuration>());
2-使用ssdt在环境(qa,dev,prod等)之间迁移表和数据