Entity Framework的事务提交
一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。事物的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的事务提交相关推荐
- Entity Framework 的事务 DbTransaction
Entity Framework 的事务 DbTransaction public static void Transaction() {myitEntities entity = null;DbTr ...
- 在Entity Framework中使用事务
继续为想使用Entity Framework的朋友在前面探路,分享的东西虽然技术含量不高,但都是经过实践检验的. 在Entity Framework中使用事务很简单,将操作放在TransactionS ...
- C#综合揭秘——Entity Framework 并发处理详解
引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...
- Entity Framework 6 Alpha 3为Code First提供对存储过程支持,并提供连接恢复功能
Microsoft宣布Entity Framework 6 Alpha 3已 经可以下载了,它现在支持通过Fluent API将Code First映射到对应的新增.修改和删除功能的存储过程:添加了连 ...
- 浅析Entity Framework Core中的并发处理
前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core的并发处理方式. 1.常见的并发处 ...
- 了解Entity Framework中事务处理
Entity Framework 6以前,框架本身并没有提供显式的事务处理方案,在EF6中提供了事务处理的API. 所有版本的EF,只要你调用SaveChanges方法进行插入.修改或删除,EF框架会 ...
- ASP.NET Core 中的 ORM 之 Entity Framework
目录 EF Core 简介 使用 EF Core(Code First) EF Core 中的一些常用知识点 实体建模 实体关系 种子数据 并发管理 执行 SQL 语句和存储过程 延迟加载和预先加载 ...
- Entity Framework 与 面向对象
说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...
- Entity Framework 学习
Entity Framework 学习初级篇1--EF基本概况... 2 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateE ...
最新文章
- 论文阅读:FFDNet:Toward a Fast and Flexible Solution for CNN based Image Denoising
- 2019年《自然》迎新子刊:机器智能、新陈代谢和综述物理
- bootstrap框架中data-xxx 的属性
- PHP 利用Mail_MimeDecode类提取邮件信息
- python时间计算_日期天数差计算(Python)
- 太阳能板如何串联_太阳能光伏系统单晶和多晶模组的差异?农村家庭自用如何科学选择...
- 数组扩容 java_java 数组扩容的方法
- C++/C--mmap()详解
- c语言跳至表域跳几个字符,c语言学习最好资料.doc
- 网关gateway解决跨域问题
- SAP License:ERP实施风险是什么?
- java 字符终端库_Java 字符终端上获取输入三种的方式分享
- 在ASP中轻松实现记录集分页显示
- mysql备份怎么锁库_MySQL锁(一)全局锁:如何作全库的逻辑备份?
- 百度音乐怎么转换格式?MP3格式转换为wav的方法分享
- Git submodule使用指南(二)
- 沉浸式体验参加网络安全培训班,学习过程详细到底!
- ad网络标号设置经验_ad放置网络标号
- Openlayers笔记之图片偏移的完整解决方案
- 2016年开源巨献:百度71款开源项目
热门文章
- Ubuntu18.04下安装RRStudio
- CSDN如何自动生成目录
- android fragment 退出程序,android – 应用程序在Fragment中单击后退按钮后关闭
- 更改Cmd默认默认路径(以设置为D:/为例)
- 交替性注意力_如何从心理学角度解释“专注力”,“专注力”对一个人的影响?...
- Django--django安装和HTTP协议
- 由于问题引起信号ORA-27154无法启动数据库
- 【Linux抓包工具之tcpdump】
- C#托管代码与C++非托管代码互相调用二(C++调用C#代码)
- UA MATH567 高维统计专题1 稀疏信号及其恢复2 用L1-norm作为L0-norm的convex relexation