【EF Core 】事务
EF Core 事务
EF Core提供了SaveChange方法,可以把数据操作好之后再统一调用SaveChange方法,这样就实现了简单的事务功能
如果需要多个SaveChange形成一个事务,就是说多个SaveChange要么全部成功,要么全部不执行,则需要使用DbContext.Database.BeginTransaction()来开启一个事务
出现错误时调用IDbContextTransaction.Rollback()方法实现回滚
例如
EF Core提供了SaveChange方法,可以把数据操作好之后再统一调用SaveChange方法,这样就实现了简单的事务功能
如果需要多个SaveChange形成一个事务,就是说多个SaveChange要么全部成功,要么全部不执行,则需要使用DbContext.Database.BeginTransaction()来开启一个事务
出现错误时调用IDbContextTransaction.Rollback()方法实现回滚
例如
// 开启事务 using (IDbContextTransaction dbContextTransaction = context.Database.BeginTransaction()) { try { context.Cities.Add(new City() { CityName = "Test", CityUrlCode = "123", Province = 2 }); context.SaveChanges(); context.Cities.Add(new City() { CityName = "Test2", CityUrlCode = "这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值", Province = 2 }); context.SaveChanges(); //提交事务 dbContextTransaction.Commit(); } catch { //回滚 dbContextTransaction.Rollback(); } }
运行后发现数据库中一条记录也没有添加,说明回滚成功了
保存点
在事务中创建保存点,这样在失败时可以回滚到该保存点
例如
using (IDbContextTransaction dbContextTransaction = context.Database.BeginTransaction()) { try { context.Cities.Add(new City() { CityName = "Test", CityUrlCode = "123", Province = 2 }); context.SaveChanges(); //创建保存点,并在失败时回滚到该保存点: dbContextTransaction.CreateSavepoint("savePoint1"); context.Cities.Add(new City() { CityName = "Test2", CityUrlCode = "这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值这是一个会导致错误的值", Province = 2 }); context.SaveChanges(); dbContextTransaction.Commit(); } catch { //回滚到保存点 dbContextTransaction.RollbackToSavepoint("savePoint1"); dbContextTransaction.Commit(); } }
运行后发现数据库中多了一条记录,说明回滚到保存点成功了
编程是个人爱好
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~