一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。事物的Commit是执行了你的方法进行了数据库的提交,之前的sava都是放在缓存中并没有执行到数据库。

  • 1. 使用TransactionScope

这个写法最像ado.net的事务提交。需要引用System.Transactions命名空间。

var invoiceDetailOriginal = InvoiceDetailService.Query(m => m.DetailID == 86).FirstOrDefault();using (TransactionScope transaction = new TransactionScope()){try{List<BL_Invoice> invoiceLst = new List<BL_Invoice>();List<BL_InvoiceDetail> detailLst = new List<BL_InvoiceDetail>();var lst = InvoiceService.Query(m => m.ID > 49).ToList();for (int n = 0; n < 3; n++){BL_Invoice i = new BL_Invoice(){IsWD = lst[n].IsWD,IsAzure = lst[n].IsAzure,InvoiceNumber = lst[n].InvoiceNumber,InvoiceDate = DateTime.Now,BITTYPE = lst[n].BITTYPE,BPexternalID = lst[n].BPexternalID,CAexternalID = lst[n].CAexternalID,Amount = lst[n].Amount,IsMETHODSynced = false,METHOD_INCC = (n == 1) ? "XXXX" : "P",CreatedDate = DateTime.Now};BL_InvoiceDetail d = new BL_InvoiceDetail(){BL_Invoice = i,BITREF32 = invoiceDetailOriginal.BITREF32,MSSKU = (n == 1) ? "存二十个汉字;存二十个汉字;存二十个汉字;存二十个汉字;存二十个汉字。" : invoiceDetailOriginal.MSSKU,Amount = invoiceDetailOriginal.Amount,Tax = invoiceDetailOriginal.Tax,DeferralAmount = invoiceDetailOriginal.DeferralAmount,BITDATE_FROM = invoiceDetailOriginal.BITDATE_FROM,BITDATE_TO = invoiceDetailOriginal.BITDATE_TO,CreatedDate = DateTime.Now};InvoiceService.Add(i);InvoiceDetailService.Add(d);     //到这一步出错,然后看添加invoice也没有添加上。 这就是事务的作用。当然entity的savaChangge() 也可以看做是一个事务。transaction.Complete();}}catch (Exception ex){throw ex;}finally{transaction.Dispose();}

  •  2. SaveChangges() 和UnitOfWork.Commit()

插入一两个相关的list。list中有一条出错,整个事务回滚。利用的 reponsitory的 IUnitOfWork。

List<BL_Invoice> invoiceLst = new List<BL_Invoice>();List<BL_InvoiceDetail> detailLst = new List<BL_InvoiceDetail>();var lst = InvoiceService.Query(m => m.ID > 49).ToList();for (int n = 0; n < lst.Count();n++){BL_Invoice i = new BL_Invoice(){IsWD = lst[n].IsWD,IsAzure = lst[n].IsAzure,InvoiceNumber = lst[n].InvoiceNumber,InvoiceDate = DateTime.Now,BITTYPE = lst[n].BITTYPE,BPexternalID = lst[n].BPexternalID,CAexternalID = lst[n].CAexternalID,Amount = lst[n].Amount,IsMETHODSynced = false,METHOD_INCC =(n==1)?"XXX":"P",CreatedDate = DateTime.Now};invoiceLst.Add(i);var invoiceDetailOriginal = InvoiceDetailService.Query(m => m.DetailID == 86).FirstOrDefault();//lst[n].BL_InvoiceDetail.FirstOrDefault();BL_InvoiceDetail d = new BL_InvoiceDetail(){BL_Invoice = i,BITREF32 = invoiceDetailOriginal.BITREF32,MSSKU = (n == 1) ? "存二十个汉字;存二十个汉字;存二十个汉字;存二十个汉字;存二十个汉字。" : invoiceDetailOriginal.MSSKU,Amount = invoiceDetailOriginal.Amount,Tax = invoiceDetailOriginal.Tax,DeferralAmount = invoiceDetailOriginal.DeferralAmount,BITDATE_FROM = invoiceDetailOriginal.BITDATE_FROM,BITDATE_TO = invoiceDetailOriginal.BITDATE_TO,CreatedDate = DateTime.Now};detailLst.Add(d);}InvoiceService.AddRange(invoiceLst, detailLst);

总体来说Entity Framework中的数据库操作无不体现着事务的关联性,毕竟这也是合理的要求。比ado.net中操作简单方便。

转载于:https://www.cnblogs.com/sunShineJing/p/4615456.html

Entity Framework的事务提交相关推荐

  1. Entity Framework 的事务 DbTransaction

    Entity Framework 的事务 DbTransaction public static void Transaction() {myitEntities entity = null;DbTr ...

  2. 在Entity Framework中使用事务

    继续为想使用Entity Framework的朋友在前面探路,分享的东西虽然技术含量不高,但都是经过实践检验的. 在Entity Framework中使用事务很简单,将操作放在TransactionS ...

  3. C#综合揭秘——Entity Framework 并发处理详解

    引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...

  4. Entity Framework 6 Alpha 3为Code First提供对存储过程支持,并提供连接恢复功能

    Microsoft宣布Entity Framework 6 Alpha 3已 经可以下载了,它现在支持通过Fluent API将Code First映射到对应的新增.修改和删除功能的存储过程:添加了连 ...

  5. 浅析Entity Framework Core中的并发处理

    前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core的并发处理方式. 1.常见的并发处 ...

  6. 了解Entity Framework中事务处理

    Entity Framework 6以前,框架本身并没有提供显式的事务处理方案,在EF6中提供了事务处理的API. 所有版本的EF,只要你调用SaveChanges方法进行插入.修改或删除,EF框架会 ...

  7. ASP.NET Core 中的 ORM 之 Entity Framework

    目录 EF Core 简介 使用 EF Core(Code First) EF Core 中的一些常用知识点 实体建模 实体关系 种子数据 并发管理 执行 SQL 语句和存储过程 延迟加载和预先加载 ...

  8. Entity Framework 与 面向对象

    说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...

  9. Entity Framework 学习

    Entity Framework 学习初级篇1--EF基本概况... 2 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateE ...

最新文章

  1. 论文阅读:FFDNet:Toward a Fast and Flexible Solution for CNN based Image Denoising
  2. 2019年《自然》迎新子刊:机器智能、新陈代谢和综述物理
  3. bootstrap框架中data-xxx 的属性
  4. PHP 利用Mail_MimeDecode类提取邮件信息
  5. python时间计算_日期天数差计算(Python)
  6. 太阳能板如何串联_太阳能光伏系统单晶和多晶模组的差异?农村家庭自用如何科学选择...
  7. 数组扩容 java_java 数组扩容的方法
  8. C++/C--mmap()详解
  9. c语言跳至表域跳几个字符,c语言学习最好资料.doc
  10. 网关gateway解决跨域问题
  11. SAP License:ERP实施风险是什么?
  12. java 字符终端库_Java 字符终端上获取输入三种的方式分享
  13. 在ASP中轻松实现记录集分页显示
  14. mysql备份怎么锁库_MySQL锁(一)全局锁:如何作全库的逻辑备份?
  15. 百度音乐怎么转换格式?MP3格式转换为wav的方法分享
  16. Git submodule使用指南(二)
  17. 沉浸式体验参加网络安全培训班,学习过程详细到底!
  18. ad网络标号设置经验_ad放置网络标号
  19. Openlayers笔记之图片偏移的完整解决方案
  20. 2016年开源巨献:百度71款开源项目

热门文章

  1. Ubuntu18.04下安装RRStudio
  2. CSDN如何自动生成目录
  3. android fragment 退出程序,android – 应用程序在Fragment中单击后退按钮后关闭
  4. 更改Cmd默认默认路径(以设置为D:/为例)
  5. 交替性注意力_如何从心理学角度解释“专注力”,“专注力”对一个人的影响?...
  6. Django--django安装和HTTP协议
  7. 由于问题引起信号ORA-27154无法启动数据库
  8. 【Linux抓包工具之tcpdump】
  9. C#托管代码与C++非托管代码互相调用二(C++调用C#代码)
  10. UA MATH567 高维统计专题1 稀疏信号及其恢复2 用L1-norm作为L0-norm的convex relexation