实体框架 - SaveChanges 与事务
Posted
技术标签:
【中文标题】实体框架 - SaveChanges 与事务【英文标题】:Entity Framework - SaveChanges vs Transaction 【发布时间】:2022-01-08 02:25:24 【问题描述】:我有一个有点愚蠢的问题,但我没有找到答案。
在事务中单次调用 SaveChanges() 和单次调用 SaveChanges() 有什么区别吗? (我在 .net core 5 应用程序中使用实体框架)
我想在一个表中创建一条记录并更新另一个表中的数据。
例如,它会是:
users.Password = "..."
var passwordReset = new PasswordReset(...)
_context.Add(passwordReset);
_context.SaveChanges();
还有交易:
using (var transaction = _context.Database.BeginTransaction())
users.Password = "..."
var passwordReset = new PasswordReset(...)
_context.Add(passwordReset);
_context.SaveChanges();
transaction.Commit();
我想确保两个查询都能成功完成,但我不知道哪个选项最适合我。
提前致谢
【问题讨论】:
一般数据库规则:一个事务的所有操作要么失败要么成功。如果一个事务有多个数据库更改,它们要么全部发生(提交时),要么没有发生(回滚)。 |通常围绕非常单一的创建、更新或删除操作存在隐式事务。这是保存,但如果您正在执行批量操作,可能会对性能产生影响。 |对于批量操作,通常最好进行一个显式事务,这样您就不会在隐式的“事务开始、操作、事务提交”垃圾邮件上浪费大量时间。 【参考方案1】:在事务中,单次调用 [to]
SaveChanges()
和 [a] 单次调用 [to]SaveChanges()
之间有什么区别吗? (我在 .net core 5 应用程序中使用实体框架)
不是真的。对SaveChanges()
的一次调用形成它自己的事务。使用事务是一种将多个对SaveChanges
的调用组合在一起的方法,因此它们可能全部成功或全部失败(或者具有更细粒度的控制以在失败时部分回滚)。
参见transactions in EF Core上的参考
【讨论】:
以上是关于实体框架 - SaveChanges 与事务的主要内容,如果未能解决你的问题,请参考以下文章