【问题标题】:How to enable migrations through code only without using Package manager console如何在不使用包管理器控制台的情况下仅通过代码启用迁移
【发布时间】:2016-11-06 05:44:55
【问题描述】:
我首先在我的应用程序中使用实体框架代码。但是在更新模型后使用它时,每次我必须启用自动迁移并使用包管理器控制台运行update-database。有没有人对此有解决方案,我们是否可以在不使用包管理器控制台的情况下自动化这个和update-database。
【问题讨论】:
标签:
entity-framework
ef-code-first
entity-framework-6
entity-framework-migrations
【解决方案1】:
您只需运行一次Enable-Migrations,即可生成Configuration.cs 类和Initial 迁移。之后,无论何时更改模型,都必须通过运行Add-Migration 生成新的迁移,并且您还必须运行Update-Database 将迁移应用到您的数据库,但您不需要再次运行Enable-Migrations .
如果您想自动化该过程,您可以通过在Configuration 类的构造函数中设置AutomaticMigrationsEnabled = true 来启用迁移的自动生成,并在DbContext 中使用MigrateDatabaseToLatestVersion 数据库初始化程序。这将允许您只更改您的模型代码,而不必使用包管理器控制台做任何事情,不需要 Add-Migration 或 Update-Database。您仍然需要在开始时运行一次Enable-Migrations,在您创建项目之后,以生成Initial 迁移。
无论如何,自动迁移可能会导致一些问题,我真的不建议您使用它们。因此,每当您的模型发生变化时,我都会继续执行手动 Add-Migration 命令。如果您使用 MigrateDatabaseToLatestVersion 数据库初始化程序,您仍然可以跳过执行 Update-Database。
另一种方法是使用DbMigrator 从您的代码中运行与Update-Database 等效的操作(但如果您使用MigrateDatabaseToLatestVersion 数据库初始化程序,则不需要这样做):
var migrator = new DbMigrator(new DbMigrationsConfiguration());
migrator.Update();