我的數據庫中有一個指向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