使用基于文件系统的发布时代码首次迁移

时间:2017-05-19 19:12:53

标签: c# asp.net web-deployment ef-migrations

我对此比较陌生。我试图将我的asp.net Web应用程序发布到生产IIS服务器。在visual studio中,我选择基于Filesystem的发布,因为该服务器不支持Web部署。

我为我的数据库使用Code First Migrations。只要是第一次,或者如果我放弃所有表,那么生产的部署工作正常。但是,如果我有现有的生产数据表,我会得到以下错误 -

“自创建数据库以来,支持'ApplicationDbContext'上下文的模型已更改。请考虑使用Code First Migrations更新数据库”

如何在模型更改时启用自动架构更新?我将“AutomaticMigrationsEnabled”我的Configuration.cs设置为true。我需要在global.asax或Web.Config中设置一些内容吗?我错过了什么?

在我的本地服务器上,我可以运行Update-Database。每当我推送模型更新时,如何在生产中自动执行此操作?

更新: 按照Using Entity Framework (code first) migrations in production

中的步骤,我能够摆脱生产中的错误

但是我不确定这是否是解决问题的最佳方法。或者,如果我希望每次应用程序启动时生产都继续运行此行。

Database.SetInitializer<ApplicationDbContext>(new 
MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());

1 个答案:

答案 0 :(得分:0)

使用MigrateDatabaseToLatestVersion时,它确实会为您运行迁移。因此,您肯定需要使用DbMigrator in code或生成脚本(update-database -Script)等替代方案。

这些将在您的文件夹中运行迁移。问题是您的配置中有AutomaticMigrationsEnabled = true。这告诉EF只是自动更新数据库,而不是创建基于代码的迁移文件。

有几种解决方案。首先,您可以在部署(add-migration MyMigrationName)之前添加手动迁移,也可以将初始化程序切换为CreateDatabaseIfNotExists之类的内容,然后在代码中调用迁移,如上所示。

有关详细说明,请参阅here