支持数据库上下文的模型已更改; 考虑代码优先迁移
自创建数据库以来,支持'MyDbContext'上下文的模型已经发生了变化。 考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
是什么导致这种情况发生? 我从字面上创建了一个全新的数据库并且什么也没有改变,但是每次我尝试从控制器访问模型时,都会抛出这个问题。
编辑
这与我试图与两个独立实体共享连接字符串(即数据库)的事实有关。
EF codefirst将查看您的DbContext,并发现其中声明的所有实体集合(并通过导航属性查看与这些实体相关的实体)。 然后它会查看你给它一个连接字符串的数据库,并确保那里的所有表都匹配模型中实体的结构。 如果它们不匹配,那么它不能读/写这些表。 任何时候当你创建一个新的数据库,或者如果你改变了一些关于实体类声明的内容,比如添加属性或者改变数据类型,那么它会检测到模型和数据库不同步。 默认情况下,它只会给你上面的错误。 通常在开发过程中,你想要发生的是数据库被重新创建(擦除任何数据)并从新的模型结构中重新生成。
为此,请参阅本文中的“RecreateDatabaseIfModelChanges功能”:http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx
您基本上需要提供从DropCreateDatabaseIfModelChanges继承的数据库初始值设定项(现在不推荐使用RecreateDatabaseIfModelChanges)。 为此,只需将此行添加到Global.asax
文件的Application_Start
方法即可。
Database.SetInitializer<NameOfDbContext>(new DropCreateDatabaseIfModelChanges<NameOfDbContext>());
一旦开始生产并且不再想丢失数据,那么您将删除此初始化程序,而是使用数据库迁移,以便您可以部署更改而不会丢失数据。
要解决此错误,请在Global.asax.cs文件的Application_Start()方法中编写以下代码
Database.SetInitializer<MyDbContext>(null);
在我的情况下,这个错误是由数据库中_MigrationsHistory表的存在引起的。 删除该表可解决问题。 不知道该表是如何进入我们的测试环境数据库的。
链接地址: http://www.djcxy.com/p/49687.html上一篇: Model backing a DB Context has changed; Consider Code First Migrations
下一篇: EF 4.1 Code First Split Tables Change Property/Column Names