SaveChanges 是 EF Core 将内存中增删改操作持久化到数据库的核心方法,它基于变更追踪自动识别状态、生成 SQL、启用事务并确保原子性。
EF Core 的 SaveChanges 是把内存中对实体的增删改操作真正写入数据库的“最后一道指令”。它不是简单地执行 SQL,而是基于变更追踪(Change Tracking)自动识别哪些实体变了、怎么变的,再生成并执行对应命令。用对了,省心又安全;用错了,可能数据不一致、事务失效,甚至漏保存。
调用它时,EF Core 会按顺序完成三件事:
不需要手动拼 SQL,也不用管事务开关(除非你明确要关):
Add() 或 AddRange() 加入实体,再调 SaveChanges()
blog.Title = "新标题"),EF 自动标记为 ModifiedRemove() 或 RemoveRange(),或设 Entry(e).State = EntityState.Deleted
SaveChanges() 中提交,天然事务保障默认情况下,每个 SaveChanges() 都自带事务——但仅限本次调用内所有操作。跨多次调用必须手动管事务:
BeginTransaction() 包住两次 SaveChanges,否则第二次失败会导致 Product 白存了context.Database.AutoTransactionsEnabled = false,但极少需要,关了就失去原子保障高并发或耗时操作建议用异步版本:
SaveChangesAsync() 是推荐做法,避免线程阻塞,尤其 Web 应用
基本上就这些。核心就一条:让 EF 跟踪你的实体,它自然知道该做什么;你只管业务逻辑,事务和 SQL 交给它兜底。