实体框架代码优先迁移生产(WPF应用程序)

本文关键字:WPF 应用程序 迁移 框架 代码 实体 | 更新日期: 2023-09-27 18:25:07

我最近编写了一个带有代码优先后端(SQL CE 4.0数据库)的WPF应用程序。该应用程序现在处于野外,非技术人员正在使用它。

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

当我部署更新时,这将如何工作?我似乎不知道我的客户数据库将如何迁移。每当我在一台不是我的开发机器上运行时,我只会得到以下错误;

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

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

更新----

这是我的初始化程序;

Database.SetInitializer(new Initializer());

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

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

这是我的Configuration类的构造函数;

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    DbMigrator migrator = new DbMigrator(this);
    if (migrator.GetPendingMigrations().Any())
    {
        _pendingMigrations = true;
        migrator.Update();
    }
}

实体框架代码优先迁移生产(WPF应用程序)

您缺少初始值设定项:

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

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

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

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