public class EFTransaction:ITransaction
{
DbContextTransaction originalTransaction = null; MyDbContext myDbContext = null; /// <summary>
/// 默认构造函数
/// </summary>
public EFTransaction()
{
myDbContext= DbContextHelper.MainDbContextFactory.GetDbContext(AccessMode.Write);
originalTransaction = myDbContext.Database.CurrentTransaction;
} /// <summary>
/// 构造函数
/// </summary>
public EFTransaction(IDbContextFactory factory)
{
myDbContext= factory.GetDbContext(AccessMode.Write);
originalTransaction = myDbContext.Database.CurrentTransaction;
} /// <summary>
/// 开始事务
/// </summary>
public void BeginTransaction()
{
MyDbContext dbContext = myDbContext;
if (originalTransaction == null)
{
dbContext.Database.BeginTransaction();
}
ThreadTransaction.SetTransactionFlag(true); } /// <summary>
/// 提交一个事务
/// </summary>
/// <returns></returns>
public int Commit()
{
int result = ;
if (originalTransaction == null)
{
result += myDbContext.SaveChanges();
ThreadTransaction.SetTransactionFlag(false);
DbContextTransaction transaction = myDbContext.Database.CurrentTransaction;
if (transaction != null)
{
transaction.Commit();
transaction.Dispose();
result += ;
} }
return result;
} /// <summary>
/// 回滚一个事务
/// </summary>
public void Rollback()
{ if (originalTransaction == null)
{
ThreadTransaction.SetTransactionFlag(false);
DbContextTransaction transaction = myDbContext.Database.CurrentTransaction;
if (transaction != null)
{
transaction.Rollback();
transaction.Dispose();
}
}
else
{
throw new Exception("嵌套内部事务异常");
}
} }

支持嵌套事务

使用示例:

  public static TResult AddTest0()
{ BookDAL testdal = DALFactory.CreateDAL<BookDAL>();
Framework.DataAccess.EFTransaction Transaction = new Framework.DataAccess.EFTransaction();
Transaction.BeginTransaction();
try
{
testdal.Insert(new Book { NAME="c#1234" });
Transaction.Commit();
}
catch (Exception ex)
{
Transaction.Rollback();
}
var ss= testdal.GetList();
return null;
}

EF事务封装的更多相关文章

  1. EF 事务

    http://yanwushu.byethost7.com/?p=87 1. EF对事务进行了封装:context的saveChange()是有事务性的. 2. 依赖多个不同的Context的操作(即 ...

  2. EF事务处理封装公用

    /// <summary> /// EF事务封装 公用类 /// </summary> public class TransactionCommon { DbContextTr ...

  3. 分享我们项目中基于EF事务机制的架构

    写在前面: 1. 本文中单元测试用到的数据库,在执行测试之前,会被清空,即使用空数据库. 2. 本文中的单元测试都是正确通过的. 要理解EF的事务机制,首先要理解这2个类:TransactionSco ...

  4. 分享我们项目中基于EF事务机制的架构 【转载】

    http://www.cnblogs.com/leotsai/p/how-to-use-entity-framework-transaction-scope.html 写在前面: 1. 本文中单元测试 ...

  5. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

  6. 把事务封装成类似Serializable用法的特性

    把事务封装成类似Serializable用法的特性 最近几天上班没事可做就想着整理常用的类库方法,验证.消息.分页.模版引擎.数据库操作.ini操作.文本操作.xml操作等,最后就是现在这个事务特性. ...

  7. EF事务嵌套

    EF中采用的是数据上下文DbContext,当针对数据库的所有操作共用一个数据上下文的时候,会使用同一个连接对象,因此连接打开一次,最后Save的时候关闭连接,避免了频繁的创建连接对象打开关闭,这在一 ...

  8. MVC,EF 小小封装

    1.项目中经常要用到 EF,有时候大多数的增删改查都是重复性的东西,本次封装就是为了快速开发,期间没有考虑到架构上的各种思想,就感觉到欠缺点什么东西所以这次将这些拉出来,有存在问题的话还请各位多多指导 ...

  9. EF 事务(转载)

    事务简单用法 文章一:https://www.cnblogs.com/wujingtao/p/5407821.html 1EF事务 事务就是确保一次数据库操作,所有步骤都成功,如果哪一步出错了,整个操 ...

随机推荐

  1. MySQL索引分析

    索引的出现解决数据量上升导致查询越来越慢的问题,优化数据的查询,提高查询的速度. 索引 定义: 通过各种数据结构实现的值到行位置的映射.快速定位与访问特定的数据. 作用: 提高访问速度 实现主键.唯一 ...

  2. eclipse提交Git时忽略文件

    为了避免每次使用都有百度查找,自己保存一份,方便使用. 实现方式: Eclipse切换到Navigator视图,找到.gitignore文件(如果是maven项目,一般找作为modules的项目的.g ...

  3. js修改隔行tr的颜色。

    <!DOCTYPE html><html lang="zh-Hans"><head> <meta charset="UTF-8& ...

  4. Eclipse插件开发_学习_02_GEF入门实例

    一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...

  5. java学习笔记 --- IO(2)

    IO流的分类:  流向:  输入流  读取数据  输出流 写出数据  数据类型: 字节流 字节输入流  读取数据 InputStream 字节输出流  写出数据 OutputStream 字符流 字符 ...

  6. java关键字---final和transient

    首先,说说final. final关键字可以修饰变量,方法,类.    final变量:         需求:             1 需要一个永不改变的编译时常量             2 ...

  7. ACM提交,C++,G++,C,GCC的区别

    今天做了一道水题,POJ-1004,水题一个,12个double类型的数求平均数 但是, #include <iostream> #include <cstdio> using ...

  8. nodejs--vue

    nodejs--vue 基础知识认识: 前端工程化 最近才兴起,nodejs(包的管理更加方便),webpack 数据双向绑定 mvm 数据驱动vue,vue改变数据 组件化开发 vue 中的常见 概 ...

  9. thinkphp3.0中ajax的发送

    系统支持任何的AJAX类库,Action类提供了ajaxReturn方法用于 AJAX调用后返回数据给客户端.并且支持JSON.XML和EVAL三种方式给客户端接受数据,通过配置DEFAULT_AJA ...

  10. .NET MVC 异步提交和返回参数

    一.后台页面中的接收方法和返回写法 Jsonresult意味着返回值是json格式,也可以是string或者int等其他类型. Httppost代表只接受Post方法. Mvc中返回Jsonresul ...