2014-10-06 119 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