zoukankan      html  css  js  c++  java
  • EF 事务

    http://yanwushu.byethost7.com/?p=87


    1. EF对事务进行了封装:context的saveChange()是有事务性的。

    2. 依赖多个不同的Context的操作(即分布式操作)或者多次调用context.saveChanges()操作,会脱离EF事务封装,此时可使用TransactionScope实现事务操作。案例代为:


    [csharp] view plain copy
    1. using (TransactionScope scope = new TransactionScope())  
    2. {  
    3.     //Do something with context1  
    4.     //Do something with context2  
    5.    
    6.     //Save and discard changes  
    7.     context1.SaveChanges();  
    8.    
    9.     //Save and discard changes  
    10.     context2.SaveChanges();  
    11.    
    12.     //if we get here things are looking good.  
    13.     scope.Complete();  
    14. }  



    但是这样写是有风险的,假 如context1.SaveChanges()成功了,context2.SaveChanges()失败,在scope.Complete()提交事务的时候就会终止,而Context1已经成功执行了这可能不一定符合的需要。如果需要 context1、context2要不同时执行成功,要不都不成功,需要对代码作小小的调整,如用下面的代码: 


    [csharp] view plain copy
    1. using (TransactionScope scope = new TransactionScope())  
    2. {  
    3.     //Do something with context1  
    4.     //Do something with context2  
    5.    
    6.     //Save Changes but don't discard yet  
    7.     context1.SaveChanges(false);  
    8.    
    9.     //Save Changes but don't discard yet  
    10.     context2.SaveChanges(false);  
    11.    
    12.     //if we get here things are looking good.  
    13.     scope.Complete();  
    14.     context1.AcceptAllChanges();  
    15.     context2.AcceptAllChanges();  
    16.    
    17. }  



    用SaveChanges(false)先将必要的数据库操作命令发送给数据库,这是注意context1与context2并没有真正发生改变,如果事务终止,自动回滚,两者的更改都没有真正提交到数据库,所以是可以成功回滚的。

  • 相关阅读:
    php面试题
    php最基本的缓存之一页面缓存
    原生PHP生成验证码
    原生PHP实现上传大图片与缩略图
    PHP实现连接数据库下载与导入csv格式文件
    ScrollTop火狐谷歌不兼容
    今天学的是 HTML基本元素、基本语法元素特点等,就发图片吧。
    第三天的学习知识HTML5常用的重要单词
    第二天学习了设计方面的知识
    HTLM5第一天的内容
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779890.html
Copyright © 2011-2022 走看看