如何解决‘/’应用程序服务器错误及Code First迁移问题
问题场景
错误提示
支持'LawyerDBContect'上下文的模型自数据库创建后已更改。请考虑使用Code First Migrations更新数据库。
说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中起源的更多信息。
异常详细信息:System.InvalidOperationException: 支持'LawyerDBContect'上下文的模型自数据库创建后已更改。请考虑使用Code First Migrations更新数据库。
源错误代码段
Line 16: public ActionResult Index() Line 17: { Line 18: var sorgu = db.Kategori.ToList(); Line 19: return View(sorgu); // Pass the query result to the vie Line 20: Line 18: var sorgu = db.Kategori.ToList();
用户问题:将var sorgu = db.Kategori修改为var sorgu = db.Kategori.ToList();后触发上述错误,原代码无法正常列出数据,寻求解决办法。
解决方法
1. 核心问题定位
错误根源是你的实体模型(比如Kategori类)或LawyerDBContect的配置,与已创建的数据库表结构不匹配。先自查:
- 是否新增/删除/修改过
Kategori类的属性(字段类型、名称等) - 是否调整过
LawyerDBContect中针对Kategori的Fluent API配置规则
2. 正式解决方案:Code First Migrations同步数据库
如果确认是模型变更导致的差异,按以下步骤操作:
- 打开「工具 → NuGet包管理器 → 包管理器控制台」
- 执行命令:
Add-Migration ModelUpdated(ModelUpdated为自定义迁移名称,可按需修改) - 执行命令:
Update-Database,将模型变更同步到数据库
3. 开发环境临时方案(注意:生产环境禁用)
若开发阶段不想用迁移,只想快速验证功能,可修改LawyerDBContect的初始化策略:
public class LawyerDBContect : DbContext { public LawyerDBContect() : base("YourConnectionString") { // 模型变更时自动删除并重建数据库 Database.SetInitializer(new DropCreateDatabaseIfModelChanges<LawyerDBContect>()); } public DbSet<Kategori> Kategori { get; set; } }
⚠️ 此方法会清空现有数据库数据,仅适用于开发测试。
4. 原代码无法列数据的补充说明
原代码var sorgu = db.Kategori返回的是DbSet<Kategori>对象,属于延迟加载的查询对象,若View中未正确处理遍历逻辑,会导致数据无法显示。改为.ToList()是正确的做法(提前将数据加载到内存),但前提是先解决模型与数据库的匹配问题。
内容的提问来源于stack exchange,提问作者Rufat Hasanov
相关产品推荐
相关产品推荐

