我的数据库中有一个指向3个子数据库实例的上下文。我通过上下文的构造函数注入正确的db连接字符串。EF具有一个上下文的多个数据库
但是,我很难得到这个工作与自动迁移。问题是,自动迁移需要一个无参数的构造函数,我无法提供,IDbContextFactory只允许我返回一个连接字符串。
有没有一种方法,我可以得到迁移脚本对多个数据库运行,或者我需要创建3度独立的环境中?
我的数据库中有一个指向3个子数据库实例的上下文。我通过上下文的构造函数注入正确的db连接字符串。EF具有一个上下文的多个数据库
但是,我很难得到这个工作与自动迁移。问题是,自动迁移需要一个无参数的构造函数,我无法提供,IDbContextFactory只允许我返回一个连接字符串。
有没有一种方法,我可以得到迁移脚本对多个数据库运行,或者我需要创建3度独立的环境中?
上下文的每个实例都有一个数据库连接。
假设每个子数据库WILLE有相同的代码,第一个模型,可以为每个数据库启动相同的上下文类的一个实例。
只需拨打DbContext.Initialize(真)迁移数据库,然后关闭连接。
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;
}
}
嗯,可以工作 - 你会在哪里建议初始化MVC应用程序中的3个dbcontexts? – heymega
它可以在启动时或应用程序需要使用持久性时初始化。这些上下文由控制器使用,但上下文取决于模型,因此可能是控制器层和模型层之间的持久层。 – abreneliere
对迟到的反应抱歉 - 我确实设法让这个工作,所以谢谢你的帮助。这里的技巧是将MigrateDatabaseToLatestVersion的useSuppliedContext设置为true,否则它会期望一个空构造器。 – heymega
只是要清楚,你用一个EF环境中使用相同的架构来连接到数据库的3种不同的情况下,你希望上下文能够维护所有3个实例的升级路径? – Tr1stan
是的!当它试图做自动迁移似乎只允许我指定一个连接字符串。 – heymega
如果@ Tr1stan说的是正确的,那么我如何处理的是'public CustomContext() :base(DbConnections.GetCurrentConnectionString) { }'这样做的是你的上下文仍然有一个无参数的构造函数,但连接字符串将取决于先前设置的任何标准(对于我来说,用户选择dev,test,prod) – SpaceSteak