一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。事物的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. Pods was rejected as an implicit dependency for &#39;libPods.a&#39; because its architectures &#39;x86_64&#39; didn

    引入cocoaPods后.第一次编译,或者运行update后 可能报这个错误: Pods was rejected as an implicit dependency for 'libPods.a' ...

  2. Rudiments 0.42 发布,C++ 常用工具包 - 开源中国社区

    Rudiments 0.42 发布,C++ 常用工具包 - 开源中国社区 Rudiments 0.42 发布,C++ 常用工具包

  3. libuv 与 libev 的对比

    libuv 与 libev 的对比 libuv 与 libev 的对比 05 January 2013 libuv 和 libev ,两个名字相当相近的 I/O Library,最近有幸用两个 Lib ...

  4. 简单的三方登录SDK示例,Android Activity之间数据的传递

    先建立Library工程,即普通工程然后在Android的属性勾选Library选项. 这里建立的工程为 mySdk ,Activity名为LoginActivity. LoginActivity代码 ...

  5. Java面向对象基础二

    1.对象的用法 2.多对象的创建方法 3.匿名对象的创建和用法

  6. Android font-awesome 4.2 icons png(包含holo-light和holo-dark)

    项目地址: https://github.com/bitjjj/android-font-awesome-4.2-icon-pngs

  7. The Official Preppy Handbook

    The Official Preppy Handbook: Lisa Birnbach: 9780894801402: Amazon.com: Books The Official Preppy Ha ...

  8. Spring整合Jms学习(三)_MessageConverter介绍

    1.4     消息转换器MessageConverter MessageConverter的作用主要有双方面,一方面它能够把我们的非标准化Message对象转换成我们的目标Message对象,这主要 ...

  9. C#之再议数组和集合

    1.数组 1.1简单数组 1.2 多维数组 1.3锯齿数组 1.4Array数组 1.5作为参数的数组 1.6枚举 1.7结构 以上部分可参考 http://www.cnblogs.com/ztb12 ...

  10. ecshop 后台添加 成本价 利润

    ecshop后台admin中的商品操作php文件,goods.php替换为下面的代码, 还要在数据库商品本店售价后门添加  cost  字段 为 商品成本价 ecs_goods表中添加  cost  ...