【发布时间】:2014-09-30 20:43:25
【问题描述】:
我正在使用 EntityFramework 和 MVC 进行项目,但我不断收到此错误:
支持“EFDbContext”上下文的模型自数据库创建以来发生了变化。
问题是没有待处理的迁移(我尝试删除/重新创建数据库,但仍然出现错误)
我在网上阅读了几篇文章,让我觉得我不是唯一一个与这个错误作斗争的人。
请在下面找到更多详细信息。 欢迎任何帮助以了解情况并解决问题。
项目详情
我的解决方案中有三个项目:
- 核心:模型和与数据库的映射
- GUI.MVC : 一个 Web 项目(使用 Core 中的模型)
- GUI.Console:非网络项目(使用相同的模型)
我正在尝试保持“代码优先”(我想只在代码中工作,让 EF 处理数据库)
一步一步
我已删除 Core 项目中的数据库和“Migrations”文件夹以“从头开始”。
我运行 GUI.MVC 项目:浏览时没有错误,当我访问基于它的视图时,数据库是“即时”创建的。
但是,如果我运行 GUI.Console 项目,则会收到错误消息。
我打开包管理器控制台,将 Core 项目作为默认项目(在下拉列表中),并将 MVC 项目(在 Web.config 中带有连接字符串)作为启动项目
我运行命令
Enable-Migrations -EnableAutomaticMigrations。在 Core 项目中创建了一个新文件夹“Migrations”。情况是一样的:MVC 项目有效,控制台无效。我运行命令
Update-Database,得到:No pending explicit migrations. Applying automatic migration: 201408071410203_AutomaticMigration. Running Seed method.现在,MVC 项目不再工作:当我尝试访问数据时出现错误(模型支持...)。但是,控制台项目现在正在运行!如果我重新运行命令
Update-Database,我得到No pending explicit migrations. Running Seed method.,我仍然在MVC项目中得到错误,并且Console项目正在运行。
配置
Nuget 包
- 实体框架 6.1.1
- ASP.NET MVC 5.1.2
Visual Studio 2013 更新 2
非常感谢!
【问题讨论】:
-
您在上下文中使用了哪个数据库初始化程序?您能否确认这两个项目实际上是在创建和使用相同的上下文类?
-
更新数据库-Force
-
听起来你的 MVC 项目没有使用你认为的数据库。检查您的连接字符串。此外,可能并非如此,但请注意在调试时不应用转换。因此,例如,如果您切换到“发布”配置并希望使用
Web.Release.config中的连接字符串,则不是。 -
@Randrelov 通常你必须重写 DbContext 的静态构造函数中的初始化程序,调用
Database.SetInitializer()。默认情况下,EF Code First 使用“首次使用时创建”;我不记得启用迁移是否会自动为您切换到“迁移到最新”,或者您是否必须手动执行,但您可以检查一下。 -
使用调试器查看、记录到文件或只是在您的站点上某处打印
context.Database.Connection.ConnectionString的值,其中context是一个变量,其中包含您的EFDBContext实例MVC 项目。确认这是您所期望的。
标签: c# asp.net-mvc entity-framework entity-framework-6 dbcontext