EF Core 7.0调试时误用未配置的StoreTestRMDB数据库报错
问题描述
应用此前运行正常,升级VS2022到17.6后,调试时出现异常:
Microsoft.EntityFrameworkCore.DbUpdateException: 保存实体更改时出错,请查看内部异常详情。
Microsoft.Data.SqlClient.SqlException (0x80131904): INSERT语句与外键约束"SalesOrders_SalesOrderDetails"冲突,冲突发生在数据库"StoreTestRMDB"的dbo.SalesOrders表OrderID列。
- 连接字符串配置的是
StoreRMDB,从未在项目中配置过StoreTestRMDB(仅用于SSMS数据迁移测试) - 应用启动时能正常加载
StoreRMDB,仅执行插入数据的API请求时触发错误 - 发布到其他机器后运行正常,仅本地调试出现问题
- 全解决方案搜索
StoreTestRMDB无结果
排查解决步骤
检查EF Core迁移快照文件
打开项目Migrations目录下的SalesContextModelSnapshot.cs,搜索StoreTestRMDB或约束名SalesOrders_SalesOrderDetails,确认是否存在硬编码的旧数据库引用或残留约束配置,若有则修正为当前StoreRMDB的配置。清理本地编译与EF缓存
- 删除项目根目录下的
bin和obj文件夹,彻底清除编译缓存 - 在Package Manager Console执行以下命令重置迁移:
Remove-Migration # 移除未应用的无效迁移 Add-Migration CurrentValidConfig # 重新生成基于当前数据库的迁移 Update-Database # 将迁移更新到目标数据库
- 删除项目根目录下的
检查用户机密管理器
右键项目 → 管理用户机密,打开secrets.json文件,确认是否存在指向StoreTestRMDB的连接字符串——测试时添加的机密配置会覆盖appsettings.json内容,若有则删除或修正。验证调试环境配置文件
打开appsettings.Development.json,确认调试环境的连接字符串是否正确指向StoreRMDB,避免调试配置被意外修改。检查SalesContext构造逻辑
查看SalesContext的构造代码,确认是否存在根据调试模式动态切换连接字符串的逻辑,比如误判环境变量导致加载旧数据库配置。重置VS调试状态
关闭VS,删除解决方案根目录下的.vs隐藏目录(存储VS调试缓存与配置),重新打开VS加载解决方案,清除升级后可能残留的异常配置。
补充说明
发布后运行正常的原因是:发布环境使用全新的编译文件与配置,无本地调试时的缓存、残留迁移配置或机密文件干扰。
内容的提问来源于stack exchange,提问作者Baraka

