Bri*_*n D 48 asp.net-mvc entity-framework
自创建数据库以来,支持"MyDbContext"上下文的模型已更改.请考虑使用"代码优先迁移"来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269).
是什么导致这种情况发生?我真的只是创建了一个全新的数据库并且什么都没改变,但每次我尝试从控制器访问一个模型时都会抛出这个.
编辑
它与我试图与两个独立实体共享连接字符串(即数据库)这一事实有关.
Aar*_*nLS 40
EF codefirst将查看您的DbContext,并发现在其中声明的所有实体集合(并且还通过导航属性查看与这些实体相关的实体).然后,它将查看您为其提供连接字符串的数据库,并确保其中的所有表都与模型中实体的结构相匹配.如果它们不匹配,则它无法读/写这些表.无论何时创建新数据库,或者更改了有关实体类声明的内容(例如添加属性或更改数据类型),它都会检测到模型和数据库不同步.默认情况下,它只会给您上述错误.通常在开发期间,您希望发生的事情是重新创建数据库(擦除任何数据)并从新的模型结构中再次生成.
为此,请参阅本文中的"RecreateDatabaseIfModelChanges功能":http: //weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx
您基本上需要提供一个继承自DropCreateDatabaseIfModelChanges的数据库初始化程序(现在不推荐使用RecreateDatabaseIfModelChanges).为此,只需将此行添加到文件的Application_Start方法中即可Global.asax.
Database.SetInitializer<NameOfDbContext>(new DropCreateDatabaseIfModelChanges<NameOfDbContext>());
Run Code Online (Sandbox Code Playgroud)
一旦您开始生产并且不再想丢失数据,那么您将删除此初始化程序,而是使用数据库迁移,以便您可以在不丢失数据的情况下部署更改.
Cra*_*her 35
在我的情况下,此错误是由数据库中存在_MigrationsHistory表引起的.删除该表可以解决问题.不确定该表如何进入我们的测试环境数据库.
Sid*_*Sid 29
要解决此错误,请在Global.asax.cs文件中的Application_Start()方法中编写以下代码
Database.SetInitializer<MyDbContext>(null);
Run Code Online (Sandbox Code Playgroud)
最简单,最安全的方法 如果您知道您确实想要更改/更新数据结构,以便数据库可以与您的DBContext同步,那么最安全的方法是:
这告诉EF对数据库进行更改,使其与您的DBContext数据结构相匹配
| 归档时间: |
|
| 查看次数: |
128598 次 |
| 最近记录: |