Entity Framework  事务

结合第一篇的代码

  public class BaseRepository : ITransaction, IDisposable
    {

        private XFDbContext dbContext;

之所以将数据上下文抽离出来,而不是每次使用都using,这样做就是为了在调用的时候,满足是同一个上下文,因为同一个上下文是事务性质的,在提交之前,如果一旦有异常,所有操作都会回滚

    public bool Del(string id)
        {
            bool result = false;
            BaseRepository respository = new BaseRepository();
            respository.BeginTransaction();
            try
            {
                //1.删除关系
                string sqlStr_d = "delete from S_UserRoles where UserID=@UserIDd";

                SqlParameter[] paras_d = {
                                        new SqlParameter("@UserIDd", id),
                                     };
                respository.ExecuteSqlCommand(sqlStr_d, paras_d);
                //2.删除主表
                respository.Delete<S_Users>(m => m.UserID == id);
                result = respository.Commit() > ;
            }
            catch (Exception ex)
            {
                respository.Rollback();
            }
            finally
            {
                respository.Dispose();
            }
            return result;
        }

思路是什么呢?

BeginTransaction()

更改IsTransaction属性,表示现在开始是一个实务操作,这样每一个单元操作都不会做提交

Commit()

做最后的提交,会判断一下存不存在DbContextTransaction,如果存在一并提交

Rollback()

也会判断一下存不存在DbContextTransaction,如果存在一并回滚

  public void BeginTransaction()
        { if (dbContext.Database.CurrentTransaction == null)            {                dbContext.Database.BeginTransaction();            }
            this.IsTransaction = true;

        }

        public int Commit()
        {
            int reault = dbContext.SaveChanges();
            this.IsTransaction = false;
            DbContextTransaction transaction = dbContext.Database.CurrentTransaction;
            if (transaction != null)
            {
                transaction.Commit();
                transaction.Dispose();
                reault += ;
            }

            return reault;
        }

        public void Rollback()
        {
            this.IsTransaction = false;
            DbContextTransaction transaction = dbContext.Database.CurrentTransaction;
            if (transaction != null)
            {
                transaction.Rollback();
                transaction.Dispose();
            }

        }

        public bool IsTransaction
        {
            get;
            private set;
        }

Entity Framework 第二篇 事务的更多相关文章

  1. 在Entity Framework中使用事务

    继续为想使用Entity Framework的朋友在前面探路,分享的东西虽然技术含量不高,但都是经过实践检验的. 在Entity Framework中使用事务很简单,将操作放在TransactionS ...

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

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

  3. (Entity framework 应用篇)把权限判断封装在数据库访问层

    这里,我只是以一个例子,说一下简单权限控制,通过这个例子,大家可以设计庞大的权限管理层,把权限控制封装到数据库访问层,这样程序员就不用再写权限判断的代码了 首先,先看看我数据库DBContext的定义 ...

  4. Entity Framework 第九篇 关于自增列的事务处理

    如果一个表带有自增列的,那么在事务处理的过程中,如果抑制了提交,自增的序号就不会得到,如果我们需要得到那怎么办呢?可以临时提交,但是既然提交了就要考虑到事务回滚,否则无法满足数据的一致性 public ...

  5. Entity Framework 4 数据事务操作

    利用数据库链接进行事务操作 var db = ConnectionHelper.GetConn(ConnectionType.Write);//获取上下文 var conn = db.Connecti ...

  6. Entity Framework 第一篇

    这段时间研究了orm框架EF 写一写研究的历程和心得 先贴上核心代码 public interface ITransaction { bool IsTransaction { get;} void B ...

  7. Entity Framework 的事务

    一个db.SaveChanges()相当于一个事务,多个db.SaveChanges()保证操作完整性则需要使用事务 在Entity Framework 中使用事务,事务只会对数据库操作进行回滚,不会 ...

  8. Entity Framework的启动速度优化

    最近开发的服务放到IIS上寄宿之后,遇到一些现象,比如刚部署之后,第一次启动很慢:程序放置一会儿,再次请求也会比较慢.比如第一个问题,可以解释为初次请求某一个服务的时候,需要把程序集加载到内存中可能比 ...

  9. [Programming Entity Framework] 第3章 查询实体数据模型(EDM)(一)

    http://www.cnblogs.com/sansi/archive/2012/10/18/2729337.html Programming Entity Framework 第二版翻译索引 你可 ...

随机推荐

  1. zabbix监控windows主机网卡流量

    监控windows主机网卡流量 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.     欢迎加入:高级运维工程师之路 598432640 客户端配置:(172.30.1.120,wi ...

  2. C++builder 图像字符流的存储和加载

    __fastcall TForm6::TForm6(TComponent* Owner) : TForm(Owner) { #if 1 //for debug AllocConsole(); Atta ...

  3. csuoj 1395: Timebomb

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1395 1395: Timebomb Time Limit: 1 Sec  Memory Limit ...

  4. c++之路进阶——codevs2333(弹飞绵羊)

    2333 弹飞绵羊 2010年省队选拔赛湖南  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description Lostmonk ...

  5. cocos2d-x游戏开发之烟花粒子效果

    //散烟花及“太”“棒”“了”效果 void mygame::playfire() { sprite *tai = sprite::create("tai.png"); tai-& ...

  6. Android中实现消息推送(JPush)

    1,去JPush官网注册一个账号,创建你的app的应用,并且拿到你应用的AppKey 2,在JPush官网下载对应的sdk,解压出来,将libs文件下的所有的文件全部复制到你工程的libs文件中 3, ...

  7. 系统配置SQL profile

    select M.RESPONSIBILITY_NAME, B.PROFILE_OPTION_NAME, X.USER_PROFILE_OPTION_NAME, t.profile_option_va ...

  8. PAT乙级 1023. 组个最小数 (20)

    1023. 组个最小数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定数字0-9各若干个.你可以以 ...

  9. android环境搭建—— 工欲善其事必先利其器

    安卓开发环境配置: 准备软件 a)  JDK  点击下载 b)   adt-bundle-windows-x86-20140702.zip   点击下载 [sdk + 特定版本platform + e ...

  10. zw版【转发·台湾nvp系列Delphi例程】HALCON AffineTransImage

    zw版[转发·台湾nvp系列Delphi例程]HALCON AffineTransImage unit Unit1;interfaceuses Windows, Messages, SysUtils, ...