我最近用代码第一个后端(SQL CE 4.0数据库)编写了一个WPF应用程序。该应用程序现在已经开始使用,正在被非技术人员使用。
我做了一些更改,我需要添加一个迁移来反映我已成功完成的更改。只需使用Update-Database
命令,我就可以在本地计算机上正常工作。
当我部署更新时,这将如何工作?我似乎无法弄清楚我的客户数据库将如何迁移。每当我在不是我的开发机器的机器上运行时,我只会得到以下错误;
无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。
P.S。我绝对不想启用自动迁移;)
更新----
这是我的初始化者;
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();
}
}
答案 0 :(得分:4)
你缺少初始化程序:
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<YourContext, YourMigrationsConfiguration>());
这将强制您的客户数据库在您的应用程序启动时升级。
另一个让您可以更好地控制迁移过程的选项是手动强制它:
YourMigrationsConfiguration cfg = new YourMigrationsConfiguration();
cfg.TargetDatabase =
new DbConnectionInfo(
theConnectionString,
"provider" );
DbMigrator dbMigrator = new DbMigrator( cfg );
dbMigrator.Update();
答案 1 :(得分:0)
我遇到了类似的问题,我在这个问题上写了一些关于它的内容: Change migration file manually and and keep compatible __migrationhistory record
我来到这里希望有一个解决方案,最终这篇文章帮助我理解并解决了它: http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database/