这个错误意味着什么支持'OdeToFoodDb'上下文的模型自创建数据库以来已经改变了?

时间:2015-11-24 06:22:10

标签: asp.net-mvc-4

我在现有的db表中添加了一列,突然MVC应用程序停止了错误

  应用程序中的服务器错误。

     

支持'OdeToFoodDb'上下文的模型自此以后发生了变化   数据库已创建。考虑使用Code First Migrations进行更新   数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.InvalidOperationException:模型支持   自创建数据库以来,'OdeToFoodDb'上下文已发生变化。   考虑使用Code First Migrations来更新数据库   (http://go.microsoft.com/fwlink/?LinkId=238269)。

     

来源错误:

     

第28行://};第29行:第30行:
  var restaurants = _db.Restaurants Line 31:
  .OrderByDescending(r => r.Reviews.Average(rv => rv.Rating))第32行:
  .Where(r => searchTerm == null || r.Name.StartsWith(searchTerm))

为什么会发生这种情况,我该如何解决这个问题,特别是要解决这个问题,不使用代码优先方法?

1 个答案:

答案 0 :(得分:1)

这意味着您的一个模型(Code-First转换为数据库中实际表的类)已更改。

这可以是其中一个字段的更改,例如添加键属性或向模型添加新字段。

如果您忘记了已完成的任何更改,可以使用Update-Database激活Automatic Migrations命令(如果Verbose已启用,这是默认行为)关键词。这将详细说明所做的更改,同时更新您的实际数据库。

此命令在visual studio内的Package Manager Console上运行。

喜欢这样:

Update-database -verbose
顺便说一下,除非使用代码优先方法,否则我认为无法解决这个问题。

我唯一能想到的是取消映射您想要在模型中的某些字段,而不是映射到数据库中。这样EF就不会抱怨模型的变化。 这可以使用放置在指定字段顶部的NotMapped属性来实现。