EF具有一个上下文的多个数据库

时间:2015-07-20 11:40:29

标签: c# entity-framework

我的数据库中有一个指向3个子数据库实例的上下文。我通过上下文的construtor注入了正确的数据库连接字符串。

但是我在使用自动迁移时遇到困难。问题是,自动迁移需要一个我无法提供的无参数构造函数,而IDbContextFactory只允许我返回一个连接字符串。

有没有办法让迁移脚本针对多个数据库运行,还是需要创建3个单独的上下文?

1 个答案:

答案 0 :(得分:6)

您的上下文的每个实例都有一个数据库连接。

假设每个子数据库wille具有相同的代码优先模型,您可以为每个数据库启动一个相同上下文类的实例。

只需调用DbContext.Initialize(true)即可​​迁移数据库,然后关闭连接。

var context1 = new MigratorContext( connectionString1 );
context1.Initilialize( true );
var context2 = new MigratorContext( connectionString2 );
context2.Initilialize( true );
var context3 = new MigratorContext( connectionString3 );
context3.Initilialize( true );

使用连接字符串为MigratorContext添加构造函数:

public MigratorContext(string connString)
   : base( connString)
{
    var migrationConfiguration = new MigrationConf();

    Database.SetInitializer<MigratorContext>(
        new MigrateDatabaseToLatestVersion<
            MigratorContext, MigrationConf>(true, migrationConfiguration));
}

public sealed class MigrationConf : DbMigrationsConfiguration<MigratorContext>
{
    public MigrationConf()
        : base()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
}