在操作数据库的时候,事务提交时我们必须考虑的问题,下面针对EFCore的事务进行介绍:
1.EFCore自带默认事务SaveChanges
EFCore 的一个Context连接对应的一次SaveChanges就是一个事务处理,
我们可以在一个Context里操作多个表数据,
有对一个表进行修改,对另一个表进行新增
然后一次性调用SaveChanges;
如下代码:
///DbContext SaveChanges 事务提交 事务提交 ///事务特点:要不都成功 要么都知道 using (EFCoreContext context = new EFCoreContext()) { SysLog log = context.SysLog.FirstOrDefault(l => l.Id == 1); context.SysLog.Remove(log); SysUserInfo sysUserInfo1 = context.SysUserInfo.FirstOrDefault(a => a.Id == 6); SysUserInfo sysUserInfo2 = context.Set<SysUserInfo>().Find(5); sysUserInfo1.Name += "-11"; sysUserInfo2.Name += "-22"; context.SysLog.Add(new SysLog() { UserName = "测试日志", Introduction = "描述一下" }); context.SaveChanges(); }
2.IDbContextTransaction同一数据库事务处理
//如果我需要把两个SaveChange 事务一下的? using (EFCoreContext context = new EFCoreContext()) { IDbContextTransaction tans = null; try { tans = context.Database.BeginTransaction(); //框架对事务的支持 context.SysLog.Add(new SysLog() { UserName = "第一次SaveChanges", Introduction = "第一次SaveChanges", CreateTime = DateTime.Now }); context.SaveChanges(); context.SysLog.Add(new SysLog() { UserName = "第二次SaveChanges", Introduction = "第二次SaveChanges", CreateTime = DateTime.Now }); context.SaveChanges(); tans.Commit(); //代码只有执行到这里事务才能生效 } catch (Exception ex) { if (tans != null) { tans.Rollback();//事务回退 } Console.WriteLine(ex.Message); } finally { tans.Dispose(); } }
3.TransactionScope分布式事务
多个数据库之间的事务提交用TransactionScope,也就是多个Context的提交,下面模拟多个数据库的Context
如下代码:
///如果我需要把两个SaveChange 事务一下的? using (EFCoreMigrationContext context1 = new EFCoreMigrationContext()) //招商银行的数据库 using (EFCoreMigrationContext context2 = new EFCoreMigrationContext())////中国银行的数据库 { //需要引入System.Transactions.Local.dll using (TransactionScope transactionScope = new TransactionScope()) { try { context1.SysLog.Add(new SysLog() { UserName = "context1新增一条测试数据", Introduction = "context1新增一条测试数据", CreateTime = DateTime.Now }); context1.SaveChanges(); context2.SysLog.Add(new SysLog() { UserName = "context2新增一条测试数据", Introduction = "context2新增一条测试数据", CreateTime = DateTime.Now }); context2.SaveChanges(); transactionScope.Complete();//提交事务 } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
EFCore的事务和分布式事务的使用
杨颜、 玩转站内促销广告、 google趋势、 wish发布产品价格限制政策,4个月内涨幅为1美元或最高20%、 亚马逊VAT税号零申报有什么风险?、 新手卖家如何遵循亚马逊政策、 迅田国际、 阿里国际站发布三大行业发展报告,分析行业热点!、 邮乐网购、 四海商舟华南理工跨境电商大讲堂、 2016·LAZADA周年庆典会议暨晚会、 大卖都在用的listing优化秘诀:亚马逊A/B测试全解!、 shopee的产品货源从哪来?如何的处理好供应链问题?、 亚马逊为什么能稳坐全球电商老大的宝座?、 干货:亚马逊中遇到差评和纠纷要怎么处理?、 跨境营销新思维:如何通过黑粉差评提升销量?、
No comments:
Post a Comment