DbMigrationsConfiguration如何与EF中的DbMigration相关联

时间:2015-07-07 11:45:04

标签: c# entity-framework ef-migrations

使用Enable-Migrations在实体框架中创建迁移文件夹,其中包含Configuration继承自DbMigrationsConfiguration的{​​{1}},如下所示:

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

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

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

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

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

问题DbMigration类如何与Configuration相关?

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:-1)

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