我在现有的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))
为什么会发生这种情况,我该如何解决这个问题,特别是要解决这个问题,不使用代码优先方法?
答案 0 :(得分:1)
这意味着您的一个模型(Code-First转换为数据库中实际表的类)已更改。
这可以是其中一个字段的更改,例如添加键属性或向模型添加新字段。
如果您忘记了已完成的任何更改,可以使用Update-Database
激活Automatic Migrations
命令(如果Verbose
已启用,这是默认行为)关键词。这将详细说明所做的更改,同时更新您的实际数据库。
此命令在visual studio内的Package Manager Console
上运行。
喜欢这样:
Update-database -verbose
顺便说一下,除非使用代码优先方法,否则我认为无法解决这个问题。
我唯一能想到的是取消映射您想要在模型中的某些字段,而不是映射到数据库中。这样EF就不会抱怨模型的变化。
这可以使用放置在指定字段顶部的NotMapped
属性来实现。