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 > ).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的事务提交的更多相关文章
- Entity Framework 的事务
一个db.SaveChanges()相当于一个事务,多个db.SaveChanges()保证操作完整性则需要使用事务 在Entity Framework 中使用事务,事务只会对数据库操作进行回滚,不会 ...
- Entity Framework 6事务回滚
使用EF6你有新的事务处理可以使用类似于: 复制代码 using (var context = new PostEntityContainer()) { using (var dbcxtransact ...
- Entity Framework实现事务回滚
在使用Entity Framework为主从表添加数据,当一个表添加数据成功,另一个表添加数据失败,这时候就需要用到事务回滚. 比如有以下关系的2张表. 客户端使用TransactionScope类可 ...
- Entity Framework 的事务 DbTransaction
事务代码实现如下: public static void Transaction() { myitEntities entity = null; DbTransaction tran = null; ...
- Entity Framework 第二篇 事务
Entity Framework 事务 结合第一篇的代码 public class BaseRepository : ITransaction, IDisposable { private XFDb ...
- Entity Framework中的多个库操作批量提交、事务处理
在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数. 要使用批量修改或者批量删除数据,就需要SaveCha ...
- 在Entity Framework中使用事务
继续为想使用Entity Framework的朋友在前面探路,分享的东西虽然技术含量不高,但都是经过实践检验的. 在Entity Framework中使用事务很简单,将操作放在TransactionS ...
- LinqToSql和ASP.NET Entity FrameWork 中使用事务
ASP.NET Entity FrameWork中: int flag = -1; if (this.URPmanagementEntities1.Connection.State != System ...
- Entity Framework应用:使用Code First模式管理事务
一.什么是事务 处理以数据为中心的应用时,另一个重要的话题是事务管理.ADO.NET为事务管理提供了一个非常干净和有效的API.因为EF运行在ADO.NET之上,所以EF可以使用ADO.NET的事务管 ...
随机推荐
- OC对象创建过程
在利用OC开发应用程序中,须要大量创建对象,那么它的过程是什么呢? 比方:NSArray *array = [[NSArrayalloc] init]; 在说明之前,先把OC的Class描写叙述一下: ...
- Vijos P1881 闪烁的星星
背景 星光闪耀--深蓝色空间 听说过他们的语言 沉默 暮 他们称赞深相互 描写叙述 繁星, 漫天的繁星. 繁星排成一列, 我数一数呀, 一共同拥有N仅仅小星星呢. 星星们是听话的好孩子, 小岛在指挥它 ...
- VSTO 学习笔记(十)Office 2010 Ribbon开发
原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...
- random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客
random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客 random_shuffle (stl算法)打乱顺序 2012-03-31 10:39:11| 分类: 算法 | ...
- libevent book——event | Gaccob的博客
libevent book——event | Gaccob的博客 libevent book——event 发表于 2013 年 2 月 22 日 由 gaccob 原文地址:http://www.w ...
- Java中WebService实例
Web Services是由企业公布的完毕其特定商务需求的在线应用服务,其它公司或应用软件可以通过Internet来訪问并使用这项在线服务. Web Service的关键技术和规则: 1.XML:描写 ...
- 读书笔记:《重来REWORK》
读书笔记:<重来REWORK> <重来Rework--更为简单有效的商业思维>这本书是看了别人的书单而购买的,初 拿到这本书翻看时,感觉有两点与平常的书不同,一是每个小节非常短 ...
- HTML5 CSS3专题 纯CSS打造相冊效果
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30993277 今天偶然发现电脑里面还有这种一个样例.感觉效果还不错,不记得啥时候 ...
- SlidingMenu开源项目滑动界面的实现总结
先上图 须要准备的是先得在GitHub上下载ActionBarSherlock-master.zip,和SlidingMenu-master.zip这两个开源文件,然后解压这两个包,SlidingMe ...
- oracle的to_char中的fm
SQL> select '|'||to_char(5,'999')||'|' from dual; 结果为:| 5| SQL> select '|'||to_char(5,'000' ...