MVVM项目Terrain对象插入无报错但未存入数据库是什么原因
问题解决方案
核心问题修复
你的数据库写入逻辑缺失了EF Core的变更提交步骤,EF上下文调用Add方法仅会将实体加入内存的变更追踪队列,必须调用SaveChanges()才会将变更真正写入数据库,修正后的TerrainDBManager代码如下:
try { using (ProjectOrienteeringDBContext dBContext = new ProjectOrienteeringDBContext() ) { dBContext.Terrains.Add(item); // 新增此行提交变更到数据库 dBContext.SaveChanges(); } } catch (Exception ex) { // 替换throw ex为throw,保留原始异常调用栈方便排查 throw; }
其余已知问题修复
- 难度赋值逻辑错误
你当前选中高难度选项时,赋值的是中等难度枚举值,修正对应代码:
if (hard) { terrain.Diffculty = Difficulty.Hard; }
- 输入校验缺失
解析控制点数量时增加合法性校验,避免无效数据入库:
int countOfPoints = 0; if(!int.TryParse(txtControlPoits.Text, out countOfPoints) || countOfPoints <= 0) { // 可替换为你项目对应的提示交互逻辑 MessageBox.Show("请输入有效的正整数控制点数量"); return; } terrain.ControlPoints = countOfPoints;
- 异常抛出逻辑优化
其余所有catch块中的throw ex都替换为throw,避免丢失原始异常的栈信息。
如果完成以上修改后仍无法写入数据,可检查Terrain实体的主键配置,确认主键是否为数据库自增、是否存在手动赋值重复主键的问题。
内容的提问来源于stack exchange,提问作者Yordan Mandevski
相关产品推荐
相关产品推荐

