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. uva 11178 - Morley's Theorem

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  2. Linux 系统结构

    Linux的系统结构一般由四部分组成 内核 1)内核 操作系统的核心,具有最基本的功能:内存管理.进程管理.设备驱动管理.文件系统管理,网络管理 内核版本(kernel)查看的三种方法 cat /pr ...

  3. 为VirtualBox里的Linux系统安装增强功能

    先说下为什么要安装增强功能, 很重要的原因是分辨率,没有安装增强功能的虚拟机里的系统往往不能全屏的,屏幕显示的内容没有充满整个屏幕. 还有主机和客户机之间共享文件夹也需要客户机的系统安装了增强功能. ...

  4. linux强制umount设备的方法

    假如挂载时使用了:mount /dev/sda1 /mnt/sda1 #查找占用设备的pid fuser -m /mnt/sda1 #假如此时得到的pid为12345 kill -9 12345 um ...

  5. asp.net中获得客户端的IP地址

    asp.net中获得客户端的IP地址 因为要在项目中取到客户端IP,在网上搜了下相关资料,其中有一篇文章总结的比较详细,这里就把一些我用的上总结一下 方便以后查阅.  通常我们都通过下面的代码获得IP ...

  6. SQL Server 数据查询 整理

    一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...

  7. 关于 屏幕阅读器 和 sr-only

    .sr-only = screen reader only 用于读屏器识别使用.

  8. PHP判断客户端是PC web端还是移动手机端方法

    PHP判断客户端是PC web端还是移动手机端方法需要实现:判断手机版的内容加上!c550x260.jpg后缀变成缩略图PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 ...

  9. Java中的BufferedReader 的readLine方法

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...

  10. Redis 转

    Redis 简介 Redis实践 Redis命令总结