EF Core如何获取实体原始值 EF Core OriginalValues获取方法


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

ef core如何获取实体原始值 ef core originalvalues获取方法

在 EF Core 中,获取实体的原始值(即从数据库加载时的初始值)主要通过 ChangeTrackerOriginalValues 属性实现。它适用于跟踪已修改但尚未保存的实体,常用于审计、并发控制或生成更新语句时对比变化。

通过 EntityEntry 获取 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 是只读快照,不可直接修改

OriginalValues 是一个只读的属性快照,反映实体被加载时数据库中的值。你不能通过它来“重置”原始值或影响跟踪行为:

  • 调用 entry.OriginalValues["Title"] = "xxx" 不会改变原始值,也不会触发任何状态变更
  • 如需手动恢复原始值,应赋值给实体属性本身:post.Title = entry.OriginalValues["Title"].ToString();
  • 若想强制刷新原始值(例如模拟“放弃修改”),需重新查询或调用 entry.Reload()(会覆盖当前所有修改并重置 OriginalValues

批量获取所有原始值并转为字典

方便日志记录或对比分析时,可将 OriginalValues 转成键值对字典:

Chatbase Chatbase

从你的知识库中构建一个AI聊天机器人

Chatbase 117 查看详情 Chatbase
  • 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"]

OriginalValues 在并发冲突中的作用

当使用乐观并发控制(如带 [ConcurrencyCheck]IsRowVersion() 的字段)时,EF Core 会在生成 UPDATE 语句时自动使用 OriginalValues 中的值做 WHERE 条件:

  • 例如:UPDATE Posts SET Title=@p0 WHERE Id=@p1 AND Version=@p2(@p2 来自 OriginalValues["Version"]
  • 若数据库中该行的 Version 已变,执行返回 0 行受影响,EF Core 抛出 DbUpdateConcurrencyException
  • 此时可在异常处理中访问 exception.Entries[0].OriginalValuesdatabaseValues 做合并决策

基本上就这些。OriginalValues 不复杂但容易忽略——关键记住它只对 ModifiedUnchanged 状态的已跟踪实体有效,且本质是只读快照。

以上就是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

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.