Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架:支持';EFDbContext';自创建数据库以来,上下文已更改_C#_Asp.net Mvc_Entity Framework_Entity Framework 6_Dbcontext - Fatal编程技术网

C# 实体框架:支持';EFDbContext';自创建数据库以来,上下文已更改

C# 实体框架:支持';EFDbContext';自创建数据库以来,上下文已更改,c#,asp.net-mvc,entity-framework,entity-framework-6,dbcontext,C#,Asp.net Mvc,Entity Framework,Entity Framework 6,Dbcontext,我正在从事一个使用EntityFramework和MVC的项目,我经常遇到以下错误: 自创建数据库以来,支持“EFDbContext”上下文的模型已更改 问题是没有挂起的迁移(我已尝试删除/重新创建数据库,但仍然出现错误) 我在网上读过几篇帖子,这些帖子让我觉得我不是唯一一个与这个错误作斗争的人 请在下面查找更多详细信息。 我们欢迎任何帮助来了解情况并解决问题 项目详细信息 我的解决方案中有三个项目: 核心:模型和与数据库的映射 GUI.MVC:一个web项目(使用来自核心的模型) 控制台:非

我正在从事一个使用EntityFramework和MVC的项目,我经常遇到以下错误:

自创建数据库以来,支持“EFDbContext”上下文的模型已更改

问题是没有挂起的迁移(我已尝试删除/重新创建数据库,但仍然出现错误)

我在网上读过几篇帖子,这些帖子让我觉得我不是唯一一个与这个错误作斗争的人

请在下面查找更多详细信息。 我们欢迎任何帮助来了解情况并解决问题

项目详细信息

我的解决方案中有三个项目:

  • 核心:模型和与数据库的映射
  • GUI.MVC:一个web项目(使用来自核心的模型)
  • 控制台:非web项目(使用相同的模型)
我试图让它“代码优先”(我只想在代码中工作,让EF处理数据库)

一步一步

  • 我已经删除了核心项目中的数据库和“Migrations”文件夹,以便“从头开始”

  • 我运行GUI.MVC项目:浏览时没有错误,在访问基于它的视图时,数据库是“动态”创建的

  • 但是,如果我运行GUI.Console项目,就会得到错误

  • 我打开PackageManager控制台,将核心项目作为默认项目(在下拉列表中),将MVC项目(在Web.config中使用connexionstring)作为启动项目

  • 我运行命令
    启用迁移-EnableAutomaticMigrations
    。在核心项目中创建了一个新文件夹“Migrations”。情况是一样的:MVC项目起作用,而控制台不起作用

  • 我运行命令
    updatedatabase
    ,并获得:
    没有挂起的显式迁移。应用自动迁移:201408071410203\u自动迁移。运行Seed方法。
    现在,MVC项目不再工作:当我尝试访问数据时,我得到了错误(模型支持…)。但是,控制台项目现在正在工作

  • 如果重新运行命令
    updatedatabase
    ,则不会得到任何挂起的显式迁移。运行Seed方法。我仍然在MVC项目中得到错误,并且Console项目正在工作

  • 配置

    Nuget软件包

    • 实体框架6.1.1
    • ASP.NET MVC 5.1.2
    Visual Studio 2013更新2


    非常感谢

    您可以打开调试器,我假设异常将在dbcontext或dbset的某个位置停止,并检查dbcontext或dbset变量,找到其dbcontext对象,然后检查base->Database->connectionstring属性,然后您应该看到它在抱怨哪个数据库。看起来您删除了错误的数据库。

    您在上下文中使用了哪个数据库初始值设定项?你能确认这两个项目实际上是在创建和使用同一个上下文类吗?更新数据库-听起来你的MVC项目并没有使用你认为是的数据库。检查您的连接字符串。此外,情况可能并非如此,但请注意,调试时不应用转换。因此,例如,如果您切换到“Release”配置,并希望使用
    Web.Release.config
    中的连接字符串,则实际情况并非如此。@Randrelov通常您必须在DbContext的静态构造函数中重写初始值设定项,调用
    数据库.SetInitializer()
    。默认情况下,EF代码首先使用“首次使用时创建”;我不记得启用迁移是否会自动为您切换到“migrate to latest”(迁移到最新版本),或者您是否必须手动执行此操作,但您可以进行检查。使用调试器查看、登录到文件,或者只是在站点的某个位置打印
    context.Database.Connection.ConnectionString的值,其中,
    context
    是一个变量,它在MVC项目中保存了
    EFDBContext
    的一个实例。确认这是您期望的结果。