2017-08-24 56 views
0

我有一个由SQL数据库支持的Azure移动服务。我已经很高兴地部署了几个星期,并使用EF Code First管理我的数据库。但现在,我撞到了一面砖墙,因此对移动服务的任何请求都打破了一个错误:Azure移动服务和EF代码优先 - 上下文已更改错误

The model backing the '[yourcontext]' context has changed since the database was created.

事情是,虽然它没有! 我已经试过如下:

1. Re-depoyed the service *several* times 
2. Run ‘Add-Migration’ to see if it mystically picks up any new fields/properties 
3. Run ‘Update-database’ which runs without any issues 
4. Combinations of 2&3 over and over 
5. Deleted the Migration History table 
6. Deleted ALL tables from my DB and re-run update-database, which again completes without error 
7. 6 then 3, which recreates the database 

任何想法如何,我可以解决这个insantiy?

回答

1

AFAIK,Code First Migrations可以手动或自动执行。我宁愿选择自动迁移。你可以将下面的代码添加到App_Start\Startup.MobileApp.cs文件实现自动迁移如下:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<Models.MobileServiceContext, Migrations.Configuration>()); 

Or 

var migrator = new DbMigrator(new Migrations.Configuration()); 
migrator.Update(); 

注:您需要任何配置AutomaticMigrationsEnabledMigrations\Configuration.cs下,而无需手动添加挂起模式改变为代码通过Add-Migration进行迁移,或者您可以使用Add-Migration添加待定模型更改,但不将AutomaticMigrationsEnabled设置为true。

根据您的问题,我建议您更改数据库名称并使用新数据库来缩小此问题,还需要删除Migrations文件夹下的旧迁移文件。此外,你可以参考阿德里安大厅关于Implementing Code First Migrations的书。

+0

谢谢@BruceChen。查看我发布的答案,了解我最终如何运作。是你上面说的和其他一些事情的组合! – LDJ

0

所以我固定它,而令人沮丧的:

  1. 导出我的所有数据出来一个查询窗口并保存结果到本地PC。
  2. 重命名旧的数据库
  3. 设置AutomaticMigrationsEnabled = true;并重新部署
  4. 让迁移创建数据库(但这没有创建表)
  5. 设置AutomaticMigrationDataLossAllowed = true; #PanicModeOn
  6. 重新部署
  7. 重新导入我的数据

什么闹剧。显然,我现在可以适应这一切,但是当我的应用程序投入生产时,这将是一个主要问题!