0

0

EF Core如何断开连接的实体操作 EF Core Disconnected Entities处理方法

畫卷琴夢

畫卷琴夢

发布时间:2026-01-02 11:30:10

|

199人浏览过

|

来源于php中文网

原创

EF Core 处理断开连接实体需显式设置 EntityState:新增用 Add(),更新推荐先查再改并还原并发戳,删除用 Remove();Attach() 默认 Unchanged,不适用于写操作;处理实体图应分步设子实体状态;AsNoTracking() 可提升只写性能。

ef core如何断开连接的实体操作 ef core disconnected entities处理方法

EF Core 处理断开连接的实体,核心在于让 DbContext “知道”这个实体的状态(新增、修改、删除),而不是靠自动跟踪——因为断开连接的实体从未被当前上下文跟踪过。

明确设置 EntityState 是关键步骤

断开连接的实体不会被自动追踪,必须手动告知 EF Core 它的意图:

  • 新增:用 context.Add(entity)context.Entry(entity).State = EntityState.Added
  • 更新:用 context.Update(entity)(全部字段标记为已修改)或先查再改 + 手动设原始值
  • 删除:用 context.Remove(entity)context.Entry(entity).State = EntityState.Deleted

注意:Attach() 默认设为 Unchanged,仅适合只读场景;若要更新或删除,需额外设置状态。

更新时避免全量更新和并发失效

直接 Update() 简单但会把所有属性标为“已修改”,哪怕没变;而先查再改虽精准,却可能覆盖原始并发戳导致并发检查失效。

推荐做法是:先查询实体,再赋值业务字段,最后手动恢复并发令牌的原始值:

PhotoG
PhotoG

PhotoG是全球首个内容营销端对端智能体

下载
var entity = await context.Products.FindAsync(dto.Id);
entity.Name = dto.Name;
entity.Price = dto.Price;

// 关键:还原并发戳原始值,否则 SaveChanges 不校验
context.Entry(entity).OriginalValues["ConcurrencyStamp"] = dto.ConcurrencyStamp;

await context.SaveChangesAsync();

处理实体图(含子实体)要谨慎

一个根实体带多个导航属性(如 Order → OrderItems → Product)时,Attach()Update() 的行为不一致:

  • Attach(root) 默认将子实体设为 Unchanged,即使你改了它们也不会保存
  • Update(root) 会把整个图设为 Modified,但子实体主键为空时可能被误判为新增

稳妥方式是分步处理:对每个子实体单独调用 Entry(x).State 显式指定状态,尤其注意已有 ID 的子项用 Modified,新子项用 Added

插入或更新前可禁用跟踪提升性能

如果只是批量导入或只写不读,不需要变更追踪,可在查询时用 AsNoTracking();对插入操作本身,Add() 不依赖跟踪,无需额外处理。但要注意:禁用跟踪后无法复用同一实例做后续更新,需重新查询。

基本上就这些。断开连接操作不复杂但容易忽略状态设定和并发戳还原,踩坑多在“以为 EF 会猜,其实它只认你写的 State”。

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

56

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

26

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号