支持“EFDbContext”上下文的模型已更改错误

Posted

技术标签:

【中文标题】支持“EFDbContext”上下文的模型已更改错误【英文标题】:The model backing the 'EFDbContext' context has changed error 【发布时间】:2013-08-24 06:56:27 【问题描述】:

按照Pro Asp.Net MVC book,的运动商店教程 我的 Asp.Net MVC4 解决方案中有两个项目。一个 SportsStore.WebUI 和一个 SportsStore.Domain ,下面有我的 Product 类

我在模型类中为Name 添加了一个Required 属性

    //Product.cs class
    [Required]
    public string Name  get; set; 
    //..more properties, not important as I get the same error for all -
   because I added Required to all

当我运行项目时,我收到The model backing the 'EFDbContext' context has changed since the database was created. 错误。

我已经检查了 *** 和 MSDN

解决方案 1:无效

MSDN 上建议的解决方案是运行 Update-Database -Force 。那不行,我明白了

“无法加载程序集“SportsStore.WebUI”。(如果您在 Visual Studio 中使用 Code First 迁移,如果您的解决方案的启动项目未引用包含您的迁移的项目,则可能会发生这种情况。您可以更改解决方案的启动项目或使用 -StartUpProjectName 参数。)"

这很奇怪,因为 A- 我没有先使用代码,而 B-域项目确实引用了 WebUI 项目

解决方案 2:无效

然后我在 PM 控制台中尝试了Enable-Migrations,我得到了

No context type was found in the assembly 'SportsStore.WebUI'.

然后我尝试将启动项目更改为 SportsStore.Domain(其中包含我的产品类) - 没有,同样的错误

【问题讨论】:

我不明白。您正在编辑 Product.cs 但您没有使用 Code-First? 不,我没有先使用代码,根本没有 edmx。只是Web.CONfig中的一个连接字符串,一个手动编写的DBContext类和上面的产品类:( 你所指的书中的代码是先行代码,但是通过先建表隐藏了它;当代码第一次创建表时,它们已经存在。但是,这与错误无关。 Oh.sorry 我以为代码首先提到了使用 Edmx。但是数据库仍然是在编写 product.cs 之前创建的 你正在反向工作。您想使用实体框架,但不想让他创建您的数据库或模型。您仅将其用于连接。 【参考方案1】:

这个问题实际上是因为您没有更改调用脚手架的目标。在包管理器控制台中,当您运行任何针对域对象的命令时,需要将默认项目下拉菜单设置为您的域项目。如果您尝试针对您的 Web 项目运行迁移或数据库更新,它们将会失败。

编辑

重要的是错误中的这一行

如果您在 Visual Studio 中使用 Code First 迁移,如果您的解决方案的启动项目未引用包含您的迁移的项目,则可能会发生这种情况。

错误提示 "Could not load assembly 'SportsStore.WebUI',这意味着这是迁移所在的项目,即使它们应该已进入您的域项目。

【讨论】:

谢谢。就像从下拉菜单中选择正确的项目一样简单。但是当你不知道去哪里看时,一切都是无形的。 :) 如果您在包管理器控制台中看不到默认项目下拉菜单,请稍微扩大拆分器,直到它出现。 (它不是部分可见的,也没有任何暗示,除非你这样做:它只有在完全伸展时才可见。我只是浪费了 1/2 小时试图解决这个烦恼)。【参考方案2】:

我也有这个错误。我有一个使用 EF 5.0 的现有 asp.net mvc,运行良好。

然后,我使用 EF 5.0 创建了一个指向同一个数据库的控制台应用程序。 asp.net mvc 应用程序开始抛出模型支持异常。

我注意到有一个名为“_MigrationHistory”的新表。为了让 asp.net 应用程序再次运行,我将此表重命名为“_MigrationHistory_backup”

【讨论】:

以上是关于支持“EFDbContext”上下文的模型已更改错误的主要内容,如果未能解决你的问题,请参考以下文章

24小时内有答案送分,作文改错!(1)

3.MVC基础-Code First 入门完整实例

WPF 实体框架刷新一个上下文实体

实体框架代码首先尝试打开错误的数据库

蜂巢(已更名为网易云计算基础服务)计费系统架构升级之路

仅实体框架代码错误:支持上下文的模型自创建数据库以来已更改