【发布时间】:2016-04-08 04:18:12
【问题描述】:
在我的 ASP.NET EF 6 应用程序中,我有以下配置:
internal sealed class Configuration : DbMigrationsConfiguration<Gcim.Management.Module.BusinessObjects.ManagementDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(Gcim.Management.Module.BusinessObjects.ManagementDbContext context)
{
}
}
在我的项目中,我启用了 EF 代码优先迁移。 我可以在 VS 包管理器提示符下运行 add-migration 和 update-database。 但是,当我的实体发生更改时,添加迁移和更新数据库仅适用于开发环境。 当我发布我的 ASP.NET 项目,将其安装在生产 IIS 上并运行时,我仍然收到此错误:
The model backing the 'ManagementDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
我还需要做什么才能在生产中强制增量数据库更改而不丢失数据?
【问题讨论】:
-
您的部署程序是什么?您可以使用
migrate.exe调用迁移 - 我们通常在持续集成设置(例如 TeamCity、Jenkins、TFS)中将其作为部署的一部分。您如何部署应用程序将告知您如何执行迁移。 -
我只是将发布的包解压到 C:\inetroot\www\MyAppName 文件夹下。 migrate.exe 需要哪些文件才能执行迁移?在 VS 中,C# 迁移文件是项目的一部分,但是,在项目发布后,它们不再是应用程序包的一部分。在你的情况下,当你运行 migrate.exe 时,你提供了什么作为参数,来解释需要迁移什么?
-
您可以在此处找到有关 migrate.exe 的文档
https://msdn.microsoft.com/en-us/data/jj618307.aspx我们将构建步骤配置为针对目录中的最新迁移。我们的构建服务器可以通过版本控制访问完整的源代码,因此它在运行时可以使用迁移文件。在您的情况下,由于您是手动完成所有操作,因此您需要在解压缩之前运行针对您的生产环境的迁移。我建议使用像 Jenkins(免费!)、TFS 或 TeamCity 这样的构建/部署解决方案,因为它使这个过程更加强大 -
是的 - 找到它,阅读它,运行它 - 运行良好。很乐意接受作为答案。谢谢!
标签: c# asp.net entity-framework