【问题标题】:Entity framework code first migrations production (WPF application)实体框架代码先迁移生产(WPF应用)
【发布时间】:2013-07-27 21:30:04
【问题描述】:

我最近编写了一个带有代码优先后端(SQL CE 4.0 数据库)的 WPF 应用程序。该应用程序现已推出,并被非技术人员使用。

我进行了一些更改,我需要添加迁移以反映更改,我已成功完成。只需使用Update-Database 命令,我就可以让它在我的本地机器上正常工作。

当我开始部署更新时,这将如何运作?我似乎无法弄清楚我的客户数据库将如何迁移。每当我在不是我的开发机器的机器上运行时,我都会收到以下错误;

无法更新数据库以匹配当前模型,因为存在待处理的更改并且自动迁移已禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。

附:我绝对不想启用自动迁移;)

更新----

这是我的初始化程序;

Database.SetInitializer(new Initializer());

这是我的实际初始化程序;

public class Initializer : MigrateDatabaseToLatestVersion<Context, Configuration>
{
}

这是我的配置类的构造函数;

public Configuration()
{
    AutomaticMigrationsEnabled = false;

    DbMigrator migrator = new DbMigrator(this);

    if (migrator.GetPendingMigrations().Any())
    {
        _pendingMigrations = true;
        migrator.Update();
    }
}

【问题讨论】:

    标签: c# wpf entity-framework-5


    【解决方案1】:

    你缺少初始化器:

    Database.SetInitializer(
      new MigrateDatabaseToLatestVersion<YourContext, YourMigrationsConfiguration>());
    

    这将强制您的客户数据库在您的应用程序启动时进行升级。

    另一个让您更好地控制迁移过程的选项是手动强制:

        YourMigrationsConfiguration cfg = new YourMigrationsConfiguration(); 
        cfg.TargetDatabase = 
           new DbConnectionInfo( 
              theConnectionString, 
              "provider" );
    
        DbMigrator dbMigrator = new DbMigrator( cfg );
        dbMigrator.Update();             
    

    【讨论】:

    • 非常感谢您的评论。这个已经试过了。我已经更新了上面的代码。
    猜你喜欢
    • 2012-06-06
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多