我在数据库中有一个上下文,指向3个子数据库实例。我通过上下文的构造函数注入正确的数据库连接字符串。
然而,我在使用自动迁移时遇到了困难。问题是,自动迁移需要一个无参数的构造函数,但我无法提供,而IDbContextFactory只允许我返回一个连接字符串。
是否有一种方法可以使迁移脚本针对多个数据库运行,或者我需要创建3个单独的上下文?
我在数据库中有一个上下文,指向3个子数据库实例。我通过上下文的构造函数注入正确的数据库连接字符串。
然而,我在使用自动迁移时遇到了困难。问题是,自动迁移需要一个无参数的构造函数,但我无法提供,而IDbContextFactory只允许我返回一个连接字符串。
是否有一种方法可以使迁移脚本针对多个数据库运行,或者我需要创建3个单独的上下文?
每个上下文实例都有一个数据库连接。
假设每个子数据库都将具有相同的代码优先模型,您可以为每个数据库启动同一上下文类的一个实例。
只需调用 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;
}
}
public CustomContext() : base(DbConnections.GetCurrentConnectionString) { }
。这样做的效果是您的上下文仍将具有无参数构造函数,但连接字符串将取决于先前设置的任何条件(对我来说,用户选择dev、test、prod)。 - SpaceSteak