一个db.SaveChanges()相当于一个事务,多个db.SaveChanges()保证操作完整性则需要使用事务

在Entity Framework 中使用事务,事务只会对数据库操作进行回滚,不会对内存操作做回滚

1.一个db.SaveChanges():

ModelEntity集 db =new ModelEntity集();

Entity e=new Entity();

e.属性赋值……;

db.SaveChanges();

2.多个db.SaveChanges():

添加引用:System.Transactions

using(var scope = new System.Transactions.TransactionScope()){

各种逻辑属性赋值处理……;

dbA.SaveChanges();

dbB.SaveChanges();

scope.Complete();   //提交事务,如果有问题则自动回滚

}

以下转自:http://www.cnblogs.com/hyl8218/archive/2011/10/10/2205576.html

在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数。

要使用批量修改或者批量删除数据,就需要SaveChanges(false)+AcceptAllChanges()方法了。

SaveChanges(false) 只是通知EF需要对数据库执行的操作,在内存中是属于挂起状态,在必要的时候是可以撤销的,比如AcceptAllChange()提交为真正成功,EF将撤销SaveChanges(false)的操作。

而在处理分布式事务操作的时候,就有必要使用TransactionScope 来处理了,很多时候我们会这样写:

using (TransactionScope scope = new TransactionScope())
{
    //Do something with context1
    //Do something with context2     //Save and discard changes
    context1.SaveChanges();     //Save and discard changes
    context2.SaveChanges();     //if we get here things are looking good.
    scope.Complete();
}
但是这样写是有风险的,假 

如context1.SaveChanges()成功了,context2.SaveChanges()却是有问题的,我们在scope.Complete()提交事务的时候就会终止,而Context1已经成功执行了

这可能不一定符合我们的需要。如果我们需要 context1、context2要不同时执行成功,要不都不成功,我们需要对代码作小小的调整,如用下面的代码:

using (TransactionScope scope = new TransactionScope())
{
    //Do something with context1
    //Do something with context2     //Save Changes but don't discard yet
    context1.SaveChanges(false);     //Save Changes but don't discard yet
    context2.SaveChanges(false);     //if we get here things are looking good.
    scope.Complete();
    context1.AcceptAllChanges();
    context2.AcceptAllChanges(); }
我们用SaveChanges(false)先将必要的数据库操作命令发送给数据库,这是注意context1与context2并没有真正发生改变,如果事务终止,自动回滚,两者的更改都没有真正提交到数据库,所以是可以成功回滚的。

在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数。

要使用批量修改或者批量删除数据,就需要SaveChanges(false)+AcceptAllChanges()方法了。

 

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

  1. Entity Framework的事务提交

    一组业务整体处理的行为叫一个事务.这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果.事物的Commit是执行了你的方法进行了数据库的提交,之前的sava都是放在缓存中并没有执行 ...

  2. Entity Framework实现事务回滚

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

  3. Entity Framework 6事务回滚

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

  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的朋友在前面探路,分享的东西虽然技术含量不高,但都是经过实践检验的. 在Entity Framework中使用事务很简单,将操作放在TransactionS ...

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

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

  8. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  9. C# Entity Framework并发处理

    原网站:C# Entity Framework并发处理 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NE ...

随机推荐

  1. 代码度量工具——SourceMonitor的学习和使用

    http://www.cnblogs.com/bangerlee/archive/2011/09/18/2178172.html 引言 我们提倡编写功能单一.结构清晰.接口简单的函数,因为过于复杂的函 ...

  2. 用java模拟银行柜台排队

    4年前在办理银行业务的时候,看到每个办理柜台窗口前都有很多人排队. 同时在那个时间段,我正好重温了数据结构这本书.好像里面有提到银行. 所以当时就用java写了一段小程序来模拟窗口排队的情况. 有兴趣 ...

  3. some words that I always make mistake

    发音相似容易混淆的词汇 alteration  英 [ɔːltə'reɪʃ(ə)n; 'ɒl-]  美 [,ɔltə'reʃən]  n. 修改,改变:变更 alteration /ˌɔːltəˈre ...

  4. 哟西,CLOUDSTACK第一步,搞定

    安装了N十次,找个RESET SERVER的脚本.

  5. 用JvisualVM监视远程tomcat

    在tomcat的catcalina.sh 中java_opts 环境变量中添加以下参数: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmx ...

  6. DLL——SDL_PingGe

    这篇随笔专门做SDL的DLL开发. 下面这个版本暂且称为Beta版本吧. /* typedef void (*FUNCTION)(void); HMODULE HDll; HDll = LoadLib ...

  7. [转载]Android开发必备的21个免费资源和工具

    转载自: http://blog.csdn.net/shimiso/article/details/6788375 Android移动开发平台现在不是一个“火”字能形容的,今年Android平台在市场 ...

  8. NSTemporaryDirectory 临时文件

    唯一标识 : NSString*identifier=[[NSProcessInfoprocessInfo]globallyUniqueString]; 创建临时文件路径: NSString *fil ...

  9. 关于 IOS Runtime Runloop 2

    Runtime 也就是运行时组件,一个纯C语言写的基础库. 我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码 Objective-C编写出来的程序必须得到ru ...

  10. 总结XX网app中webapp常见的前端错误。

    在2016年12月至2017年1月,这一个月的时间内,我参与了易政网app中webapp前端项目的工作,下面将我在此次项目中犯的错误总结起来,以防下次再犯.也终于知道之前看的文章中的一段话所代表的意义 ...