2014-10-06 120 views
3

我想在我的代碼中使用自動遷移,但每次我在模型中更改某些內容時,都需要手動運行update-Database。我可以自動執行嗎?EF - 代碼優先 - 自動更新數據庫

這是配置:

public class Configuration : DbMigrationsConfiguration<ManualContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = true; 
    } 
    ... 
} 

而且AppActivator

[assembly: WebActivator.PreApplicationStartMethod(typeof(AppActivator), "PreStart")] 
[assembly: PostApplicationStartMethod(typeof(AppActivator), "PostStart")] 
[assembly: ApplicationShutdownMethod(typeof(AppActivator), "Stop")] 

namespace Manual.Web 
{ 
    public static class AppActivator 
    { 
    public static void PreStart() 
    { 
     Database.SetInitializer(
       new MigrateDatabaseToLatestVersion<ManualContext,Configuration>()); 
     Database.SetInitializer(new ManualDbInitializer()); 

     MeasurementConfig.RegisterUnits(); 
     MiniProfilerPreStart(); 
    } 
    ... 
    } 

而且ManualDbInitializer - 對於種子(創建在第一次DB時):

public class ManualDbInitializer : CreateDatabaseIfNotExists<ManualContext> 
{ 
    protected override void Seed(ManualContext context) 
    { 
     ManualDbInitializerSeed.SeedForDB(context); 
    } 
} 

回答

0

如果你正在部署你的應用程序,你可能希望它自動化在應用程序啓動時對數據庫進行升級(通過應用任何掛起的遷移)。您可以通過註冊MigrateDatabaseToLatestVersion數據庫初始值設定項來完成此操作。數據庫初始化程序只包含一些用於確保數據庫安裝正確的邏輯。首次在應用程序進程(AppDomain)中使用上下文時運行此邏輯。

http://msdn.microsoft.com/en-us/data/jj591621#initializer

+0

但我有MigrateDatabaseToLatestVersion在我的代碼...你看了嗎?我做錯了什麼? – TamarG 2014-10-06 11:00:49

+0

@TamarG:什麼是'ManualDbInitializer()'?你在'MigrateDatabaseToLatestVersion ()'之後設置它。 – Masoud 2014-10-06 11:24:11

+0

它的種子..我編輯我的問題的代碼 – TamarG 2014-10-06 11:31:43