EF Core 中 OriginalValues 用于获取实体从数据库加载时的原始值,仅对 Modified 或 Unchanged 状态的已跟踪实体有效,是只读快照,常用于审计、并发控制和变更对比。

在 EF Core 中,获取实体的原始值(即从数据库加载时的初始值)主要通过 ChangeTracker 的 OriginalValues 属性实现。它适用于跟踪已修改但尚未保存的实体,常用于审计、并发控制或生成更新语句时对比变化。
当你有实体实例且它已被上下文跟踪时,先用 Entry() 获取其 EntityEntry,再访问 OriginalValues:
Find() 或查询获得),且后续被修改过var post = context.Posts.Find(1); post.Title = "新标题"; post.Content = "已更新内容"; var entry = context.Entry(post); var originalTitle = entry.OriginalValues["Title"]; // 返回旧标题 var originalContent = entry.OriginalValues["Content"]; // 返回旧内容
Added 状态),OriginalValues 为空(所有字段为 null 或默认值),因为没有“原始数据库值”OriginalValues 是一个只读的属性快照,反映实体被加载时数据库中的值。你不能通过它来“重置”原始值或影响跟踪行为:
entry.OriginalValues["Title"] = "xxx" 不会改变原始值,也不会触发任何状态变更post.Title = entry.OriginalValues["Title"].ToString();
entry.Reload()(会覆盖当前所有修改并重置 OriginalValues)方便日志记录或对比分析时,可将 OriginalValues 转成键值对字典:
Chatbase
从你的知识库中构建一个AI聊天机器人
117
查看详情
var originalDict = entry.OriginalValues.ToDictionary(kvp => kvp.Metadata.Name, kvp => kvp.Value);CurrentValues 可快速找出哪些字段被改过:
var modifiedProps = entry.Properties
.Where(p => !object.Equals(p.OriginalValue, p.CurrentValue))
.Select(p => p.Metadata.Name)
.ToList(); // 如 ["Title", "UpdatedAt"]
当使用乐观并发控制(如带 [ConcurrencyCheck] 或 IsRowVersion() 的字段)时,EF Core 会在生成 UPDATE 语句时自动使用 OriginalValues 中的值做 WHERE 条件:
OriginalValues["Version"])Version 已变,执行返回 0 行受影响,EF Core 抛出 DbUpdateConcurrencyException
exception.Entries[0].OriginalValues 和 databaseValues 做合并决策基本上就这些。OriginalValues 不复杂但容易忽略——关键
记住它只对 Modified 或 Unchanged 状态的已跟踪实体有效,且本质是只读快照。
以上就是EF Core如何获取实体原始值 EF Core OriginalValues获取方法的详细内容,更多请关注其它相关文章!
# 相关文章
# 网站推广人员的要求
# 数字营销怎么查推广
# 移动端SEO代码
# 金昌靠谱的网站优化
# 网站建设seo技术分享
# 企业抖音关键词排名优化
# 黄埔专业网站建设定制
# 品牌营销推广方案下载
# 青羊网站推广报价
# 仙桃外贸seo
# 键值对
# 你有
# 会在
# 适用于
# 已被
# 是一个
# 数据库中
# 令牌
# 键值
# 加载
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
如何在CSS中实现盒模型多列间距_grid-gap与padding结合
PHP中实现JSON数据数组分页的教程
《百果园》充值余额方法
苹果11如何更换iCloud账号_苹果11账号切换的具体步骤
手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧
《真我》申请退款方法
PHP多语言网站的实现:会话管理与翻译函数优化教程
MySQL多重关联查询:利用别名高效获取同一表的多个关联字段
解决C#跨线程访问XML对象的异常 安全的并发XML处理模式
Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题
漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明
创建快捷方式启动系统保护
J*aScript大数运算_BigInt使用指南
电脑开不了机怎么办 电脑无法开机的解决方法
口腔诊所管理软件推荐
《淘宝联盟》推广自己的店铺方法
顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南
C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析
漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享
秋风萧瑟洪波涌起中的萧瑟指的是什么
192.168.1.1路由器后台入口 192.168.1.1默认登录入口
《饿了么》拼好饭点外卖教程2025
Win10运行窗口在哪里打开 Win10调出运行命令框快捷键【技巧】
《淘票票》添加到苹果钱包教程
大熊猫抓取竹子的“大拇指”其实是什么?蚂蚁庄园课堂今天答案最新11月30日
六级准考证号怎么查_四六级准考证查询入口官网
汽水音乐网页版登录 汽水音乐网页端官方入口
iCloud官方网站 iCloud网页版在线登录入口
yandex网页版直接登录 yandex官方入口平台访问方法
视频号视频怎么免费保存到相册?保存到相册需要注意什么?
抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法
小米手机截图后如何查看历史_小米手机截图历史记录查看方法
百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析
mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧
《大学搜题酱》官网地址登录
《下一站江湖2》心法融合技巧
什么是Satis,如何用它搭建一个私有的composer仓库?
cad怎么隐藏指定的图层_cad隐藏或冻结图层方法
pubmed数据库官方主页_pubmed学术论文查找官网直达
Python实战:高效处理实时数据流中的最小/最大值
《绝区零》2.3前瞻|直播|内容介绍
咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法
mysql如何管理数据库账户_mysql数据库账户管理技巧
韩剧圈正版官网入口_韩剧圈官方指定登录
深入理解Python对象引用与链表属性赋值
Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践
解决jQuery多计算器输入字段冲突的教程
基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口
飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读
处理含命名空间的XML文件 Power Query中的高级技巧
2025-12-19
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。