DbMigrationsConfiguration 如何与 EF 中的 DbMigration 相关

How DbMigrationsConfiguration is related to a DbMigration in EF

在 Entity Framework 中,使用 Enable-Migrations 创建了一个 Migrations 文件夹,其中包含从 DbMigrationsConfiguration 继承的 Configuration,如下所示:

internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
    ...
}

所有使用 Add-Migration 创建的迁移也都放在 Migrations 文件夹中。

public partial class Init: DbMigration
{
    public override void Up()
    {
        ...
    }

    public override void Down()
    {
        ...
    }
}

我没有找到任何将这两者联系在一起的代码(例如在迁移中有一个配置 属性)。我发现的唯一关系是两者都放在同一个文件夹中。如果我有超过 1 个 DbContext,因此超过 1 个配置,我想知道这些 DbMigration 是如何区分的?

问题: DbMigration 类 如何与 Configuration 相关?

当您运行更新数据库命令时,在最新的DbMigration派生的classes中的up()方法中执行数据库操作。如果成功,则执行配置 class 中的命令。其中一种方法是 seed() 方法,您可以选择添加代码以在迁移后将值插入表中。当您指定目标迁移时(可能早于最新迁移),迁移通过迁移中的 down() 方法链进行 classes 以获得您想要的版本。

它们是约定俗成的。默认情况下,它将迁移存储在名为 Migrations 的根文件夹中。您可以在配置的构造函数 (https://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigrationsconfiguration(v=vs.113).aspx) 中或在启用迁移时覆盖它:

public Configuration()
{
    AutomaticMigrationsEnabled = true;
    MigrationsDirectory = @"Migrations\Context1";
}

对于多个上下文,使用 -ContextTypeName ProjectName.Models.Context2 -MigrationsDirectory:Migrations\Context2 为每个创建不同的配置和文件夹。这是一个演练:http://www.dotnettricks.com/learn/entityframework/entity-framework-6-code-first-migrations-with-multiple-data-contexts