EF Core调用SaveChanges时出现临时值错误的技术求助
EF Core 保存数据时的临时值错误分析
错误提示
属性...在尝试将实体状态更改为'Unchanged'时具有临时值。请显式设置永久值,或确保数据库配置为为此属性生成值。
业务场景与表结构
需要将CSV/XLSX这类多列数据表,以规范化形式存储到数据库中。部分维度字段的值已存在于库中,部分需要新增,还有部分需要更新。
源数据格式示例:Name, Facet1, Facet2, Facet2_1, Facet2_2, Numeric1, Numeric2
最终数据库表结构:
-- 主表 Id, Name, Facet1_Id, Facet2_Id, Numeric1, Numeric2 -- 维度表Facet1 Id, Facet1 -- 维度表Facet2(系统版本化表,会随附加字段变化定期更新) Id, Facet2, Facet2_1_Id, Facet2_2_Id -- 维度表Facet2_1 Id, Facet2_1 -- 维度表Facet2_2 Id, Facet2_2
实体关联层级如下:
主实体 | | Facet1 Facet2 | | Facet2_1 Facet2_2
数据处理流程
- 加载文件数据
- 开启数据库事务
- 获取现有Facet1数据,或新增不存在的条目
- 获取/新增/更新Facet2数据
- 将维度数据对应的ID映射到主实体的外键字段
- 调用
DbContext.SaveChanges()保存所有更改 - 结束事务
异常现象
调用SaveChanges()时触发上述错误,但通过脏读(加(nolock))查询数据库,会发现所有处理过的数据行已经被存储——数据实际保存成功,但EF内部抛出了异常。
已尝试的配置调整:
- 主实体及所有维度表的
Id字段均配置为DatabaseGenerated(DatabaseGeneratedOption.Identity) - 添加或移除
builder.Property(p => p.Id).ValueGeneratedOnAdd();配置,问题仍未解决
对比参考项目:有一个功能类似的项目可正常运行,但该项目的实体外键仅关联一层,没有当前项目这么深的层级嵌套。
环境信息
- EF Core 7.0.0
- SQL Server 2019
- .NET 6.0
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

