.net core 在.NET Core 2.0应用程序中合并现有数据库迁移的正式方式

.net core 在.NET Core 2.0应用程序中合并现有数据库迁移的正式方式,.net-core,database-migration,.net Core,Database Migration,我们的ASP.Net Core 2.0应用程序现在有30多个数据库迁移(通过使用dotnet ef migrations add命令生成),这些迁移都已应用于生产数据库,随着开发工作的进行,我们预计会向应用程序添加更多迁移,我的问题是如何将现有数据库迁移正确地合并为一个迁移(我们可以称之为PhaseOnMogrations),并使其与.NET核心团队设计的迁移管理机制兼容,同时使生产数据库升级尽可能顺利 如有需要,可提供更多信息,非常感谢您的帮助 ==于2018年3月24日更新== 我们确实为此

我们的ASP.Net Core 2.0应用程序现在有30多个数据库迁移(通过使用dotnet ef migrations add命令生成),这些迁移都已应用于生产数据库,随着开发工作的进行,我们预计会向应用程序添加更多迁移,我的问题是如何将现有数据库迁移正确地合并为一个迁移(我们可以称之为PhaseOnMogrations),并使其与.NET核心团队设计的迁移管理机制兼容,同时使生产数据库升级尽可能顺利

如有需要,可提供更多信息,非常感谢您的帮助

==于2018年3月24日更新==

我们确实为此提出了一个棘手的解决方案,但它需要手动操作生产数据库中的_uefmigrationhistory表,但它提供了预期的结果,方法是:

  • 删除所有迁移文件,并重新创建名为Init的新迁移,此迁移包含最新架构,然后在Up方法中添加所有必要的存储过程创建脚本
  • 删除生产数据库中_EFMigrationHistory表中的所有现有记录,并添加一条与刚创建的Init migration同名的记录,因此EF core认为这是唯一的迁移

  • 但它不是官方的,我们想知道是否有一种不需要手动触摸生产服务器上的_EFMigrationHistory表就可以做到这一点的受支持的方法。

    从哪个版本迁移到哪个版本的方法?需要保留多个迁移的原因是您希望能够从任何早期版本迁移到最新版本。创建与最新数据库匹配的新数据库不需要迁移schema@PanagiotisKanavos感谢您的回复,我们的应用程序是一个只有最新版本的在线应用程序(我们不维护应用程序的多个版本,因此每次我们将应用程序升级到新版本时,我们始终坚持使用最新版本的数据库),假设我们要将从初始迁移到最新迁移的所有迁移合并到一个迁移中,然后我们将继续添加新迁移,一两个月后,我们将再次将已合并的迁移与后来添加的所有迁移合并到一个迁移中,因此,我们将迁移保持在可管理的文件数量上。如果您不想迁移超过某个迁移,则根本不需要以前的迁移。您仍然需要保持足够的迁移以匹配开发、测试、QA环境。这并不特定于EF Core,但实际上我们确实需要迁移来将当前数据库迁移到新版本(仅向前迁移,不向后迁移),迁移帮助我们的开发团队协作(我们在数据库迁移时进行代码检查和代码合并)