一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。事物的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 > ).ToList();
for (int n = ; 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==)?"XXX":"P",
CreatedDate = DateTime.Now
};
invoiceLst.Add(i);
var invoiceDetailOriginal = InvoiceDetailService.Query(m => m.DetailID == ).FirstOrDefault();//lst[n].BL_InvoiceDetail.FirstOrDefault();
BL_InvoiceDetail d = new BL_InvoiceDetail()
{
BL_Invoice = i,
BITREF32 = invoiceDetailOriginal.BITREF32,
MSSKU = (n == ) ? "存二十个汉字;存二十个汉字;存二十个汉字;存二十个汉字;存二十个汉字。" : 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中操作简单方便。

Entity Framework的事务提交的更多相关文章

  1. Entity Framework 的事务

    一个db.SaveChanges()相当于一个事务,多个db.SaveChanges()保证操作完整性则需要使用事务 在Entity Framework 中使用事务,事务只会对数据库操作进行回滚,不会 ...

  2. Entity Framework 6事务回滚

    使用EF6你有新的事务处理可以使用类似于: 复制代码 using (var context = new PostEntityContainer()) { using (var dbcxtransact ...

  3. Entity Framework实现事务回滚

    在使用Entity Framework为主从表添加数据,当一个表添加数据成功,另一个表添加数据失败,这时候就需要用到事务回滚. 比如有以下关系的2张表. 客户端使用TransactionScope类可 ...

  4. Entity Framework 的事务 DbTransaction

    事务代码实现如下: public static void Transaction() { myitEntities entity = null; DbTransaction tran = null; ...

  5. Entity Framework 第二篇 事务

    Entity Framework  事务 结合第一篇的代码 public class BaseRepository : ITransaction, IDisposable { private XFDb ...

  6. Entity Framework中的多个库操作批量提交、事务处理

    在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数. 要使用批量修改或者批量删除数据,就需要SaveCha ...

  7. 在Entity Framework中使用事务

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

  8. LinqToSql和ASP.NET Entity FrameWork 中使用事务

    ASP.NET Entity FrameWork中: int flag = -1; if (this.URPmanagementEntities1.Connection.State != System ...

  9. Entity Framework应用:使用Code First模式管理事务

    一.什么是事务 处理以数据为中心的应用时,另一个重要的话题是事务管理.ADO.NET为事务管理提供了一个非常干净和有效的API.因为EF运行在ADO.NET之上,所以EF可以使用ADO.NET的事务管 ...

随机推荐

  1. [置顶] android系统功能调用大全

    1.从google搜索内容  Intent intent = new Intent();  intent.setAction(Intent.ACTION_WEB_SEARCH);  intent.pu ...

  2. Winsock 编程流程

    近期看了<Window程序设计>感觉在网络方面讲的不错,讲的非常通俗易懂.与大家一同交流 转载请注明出处:http://blog.csdn.net/u010484477谢谢^_^ 使用 W ...

  3. Android笔记之网络-基本了解

    1.3个相关API接口 Android网络编程相关的API接口与相关用途例如以下图 2. 2种网络架构模式 B/S----浏览器/server端模式,通过应用层的HTTP协议通信,不须要特定clien ...

  4. 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)

    题目链接:传送门 题意: n个格子排成一行.我们有m种颜色.能够给这些格子涂色,保证相邻的格子的颜色不同 问,最后恰好使用了k种颜色的方案数. 分析: 看完题目描写叙述之后立刻想到了一个公式 :C(m ...

  5. HTML5 CSS3专题 纯CSS打造相冊效果

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30993277 今天偶然发现电脑里面还有这种一个样例.感觉效果还不错,不记得啥时候 ...

  6. Android_模拟时钟内时针、分针触摸转动

    最近实现了android里的一个机能,在activity里面画了一个模拟的时针,然后触摸上面的时针跟分针可以实现调时间的功能. 其实,说起原来来还是挺简单的,但是我花了将近一周的时间才全部实现,有点惭 ...

  7. 核心ASP.NET

    1.用于Web应用程序的.NET Framework ASP.NET是.NET Framework的一部分,它可以在通过HTTP请求文档是在WEB服务器上动态创建它们,在.Net Framework中 ...

  8. cocos2dx 3.1从零学习(六)——CocosStudio(VS2013project导入及环境设置)

    导入libCocosStudio.libExtensions.libGUI 新建的project例如以下图: 加入现有项目 右键解决方式.例如以下操作: watermark/2/text/aHR0cD ...

  9. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  10. Codeforces 191 C Fools and Roads (树链拆分)

    主题链接~~> 做题情绪:做了HDU 5044后就感觉非常easy了. 解题思路: 先树链剖分一下,把树剖分成链,由于最后全是询问,so~能够线性操作.经过树链剖分后,就会形成很多链,可是每条边 ...