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

Code first migrations when using Filesystem based publish

我对此比较陌生。我正在尝试将我的 asp.net Web 应用程序发布到生产 IIS 服务器。在 visual studio 我 select 基于文件系统的发布中,因为该服务器不支持 Web 部署。

我为我的数据库使用代码优先迁移。只要是第一次,或者如果我删除所有表,部署到生产环境就可以正常工作。但是,如果我有包含生产数据的现有表,我会收到以下错误 -

"The model backing the 'ApplicationDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database"

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

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


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

中的步骤,我能够消除生产中的错误

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

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

当您使用 MigrateDatabaseToLatestVersion 时,它确实会 运行 为您迁移。因此,您肯定需要那个或其中一种替代方法,例如使用 DbMigrator in code 或生成脚本 (update-database -Script)。

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

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

有关详细说明,请参阅 here