【问题标题】:how to properly promote Entity Framework code-first migrations into production?如何正确地将实体框架代码优先迁移到生产中?
【发布时间】: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


【解决方案1】:

您可以使用包含在实体框架 nuget 包中的 migrate.exe 应用程序针对给定环境(在本例中为您的生产环境)执行给定迁移文件。在发布 Web 应用程序之前,您需要针对生产环境执行最新的迁移 - 完成此操作后,新部署的应用程序将正常工作。

您可以通过指定连接字符串和包含迁移类的 .dll 以及可能的特定迁移来执行此操作。例如:

Migrate.exe Gcim.Management.Module.BusinessObjects.dll /connectionString="Data Source=[YourProductionDatabase];Initial Catalog=[YourTable];Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient" /targetMigration="[NameofYourMigration]"

migrate.exe 的文档可以在这里找到:https://msdn.microsoft.com/en-us/data/jj618307.aspx

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 2013-12-29
    • 1970-01-01
    • 2013-07-27
    • 2017-10-31
    • 2013-01-02
    相关资源
    最近更新 更多