2015-07-01 63 views
2

我正在研究一個多承租人應用程序,我們決定爲每個承租人擁有一個數據庫。我正在編寫一個服務來爲新客戶創建和初始化一個新的數據庫。多個上下文在同一個數據庫上定義。到目前爲止,我已經使用nuget update-database讓所有上下文創建它們的數據庫對象。現在我需要在運行時做同樣的事情。我想:實體框架6:創建具有多個上下文的數據庫

context.Database.Initialize(false); context.Database.CreateIfNotExists();

但只有第一個背景下產生其表。我知道一個上下文在第一次使用時初始化數據庫,但顯然它不會在數據庫已經存在的情況下使用。我嘗試了幾個初始化器,但沒有運氣。我不想編寫一個結合所有其他上下文的新上下文,因爲它很難維護。我知道另一個選項是在部署時生成sql腳本並在運行時執行它們。這將是我最後的手段。

任何建議,非常感謝。

+0

所不同的是在這種情況下,雖然需要應用程序代碼不NuGet包管理器來完成數據庫初始化。 –

回答

0

我結束了使用DbMigrator。您需要爲您的上下文設置遷移配置類,並根據上下文執行以下操作。

 var migrationConfig = new MyApp.Data.Migrations.Configuration 
     { 
      TargetDatabase = new DbConnectionInfo(tenantProfile.ConnectionString, "MySql.Data.MySqlClient") 
     }; 
     var migrator = new DbMigrator(migrationConfig); 
     migrator.Update(); 
1

EF6確實支持多個上下文的初始化。它基於ContextKey(__MigrationHistory上的屬性和新字段)。
它支持您(與我的一樣)基於多個數據庫的多tennant方法。
我知道是壞添加一個鏈接,但這篇文章寫得非常好: https://msdn.microsoft.com/en-us/magazine/dn948104.aspx