You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:29:56