1

我正在開發一個asp.net mvc項目。我想知道如何在應用程序設置期間(由客戶端自己)在沒有在新數據庫上手動運行遷移的情況下,使用新數據庫更改/切換數據庫。使用實體框架代碼優先的方法切換數據庫

我想更改連接字符串中的數據庫名稱,就是這樣。我的項目應該配置並且與新數據庫配合良好。

請提出解決方案。

回答

1

您可以在配置文件中設置 「MigrateDatabaseToLatestVersion」:

internal sealed class Configuration : System.Data.Entity.MigrateDatabaseToLatestVersion<DbContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     //.................. 
    } 

    protected override void Seed(DbContext context) 
    { 
     ///.... 
    } 
} 

更新:

你可以在Global.asax文件中設置Database.SetInitializer:

protected void Application_Start() 
    { 
     .... 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>()); 
    } 
+0

這是與sql服務器正常工作。在sql服務器,我只是用新的數據庫替換我的連接字符串,它運行良好,沒有運行遷移,但是當我使用oracle數據庫並更改連接到新的數據庫時,我必須運行所有th遷移。 –

1

如前所述通過Iraj,有一個數據庫初始化程序,您可以使用它在啓動期間使用更改的數據庫設置遷移:

Database.SetInitializer<ObjectContext>(
    new MigrateDatabaseToLatestVersion<ObjectContext, Configuration>()); 

另一種方法:

var Configuration = new DbContextConfiguration(); 
Configuration.TargetDatabase = new DbConnectionInfo(
    database.ConnectionString, database.ProviderName); 

var MyMigrator = new DbMigrator(configuration); 
MyMigrator.Update(); 
MyMigrator.GetPendingMigrations(); ' Optional 

你也可以創建一個可以採取的數據庫名稱(或完整的連接字符串)從客戶端輸入的設置頁面,您可以使用通過代碼運行遷移當他們運行應用程序。瞧!

參考 - http://romiller.com/2012/02/09/running-scripting-migrations-from-code/

[更新] 一個小竅門,你可以使用實體框架遷移功能爲您的發展,一旦你最後定稿的實體,一切都那麼你可以簡單地刪除遷移文件,並刪除完成了它從應用程序掛鉤並與客戶/用戶共享。 然後實體框架默認會創建新的數據庫或將更新任何現有的數據庫與您的項目實體。 您可以使用默認的asp.net web api模板檢查相同的內容。在創建新項目時,如果您選擇asp.net身份進行身份驗證,則只包含少數實體,這些實體會在第一次運行應用程序時自動創建。

相關問題