一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。事物的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. OC对象创建过程

    在利用OC开发应用程序中,须要大量创建对象,那么它的过程是什么呢? 比方:NSArray *array = [[NSArrayalloc] init]; 在说明之前,先把OC的Class描写叙述一下: ...

  2. Vijos P1881 闪烁的星星

    背景 星光闪耀--深蓝色空间 听说过他们的语言 沉默 暮 他们称赞深相互 描写叙述 繁星, 漫天的繁星. 繁星排成一列, 我数一数呀, 一共同拥有N仅仅小星星呢. 星星们是听话的好孩子, 小岛在指挥它 ...

  3. VSTO 学习笔记(十)Office 2010 Ribbon开发

    原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...

  4. random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客

    random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客 random_shuffle (stl算法)打乱顺序 2012-03-31 10:39:11|  分类: 算法 | ...

  5. libevent book——event | Gaccob的博客

    libevent book——event | Gaccob的博客 libevent book——event 发表于 2013 年 2 月 22 日 由 gaccob 原文地址:http://www.w ...

  6. Java中WebService实例

    Web Services是由企业公布的完毕其特定商务需求的在线应用服务,其它公司或应用软件可以通过Internet来訪问并使用这项在线服务. Web Service的关键技术和规则: 1.XML:描写 ...

  7. 读书笔记:《重来REWORK》

    读书笔记:<重来REWORK> <重来Rework--更为简单有效的商业思维>这本书是看了别人的书单而购买的,初 拿到这本书翻看时,感觉有两点与平常的书不同,一是每个小节非常短 ...

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

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

  9. SlidingMenu开源项目滑动界面的实现总结

    先上图 须要准备的是先得在GitHub上下载ActionBarSherlock-master.zip,和SlidingMenu-master.zip这两个开源文件,然后解压这两个包,SlidingMe ...

  10. oracle的to_char中的fm

    SQL> select '|'||to_char(5,'999')||'|' from dual;  结果为:|   5| SQL> select '|'||to_char(5,'000' ...