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插入一万条数据

    定义一个存储过程 mysql> delimiter $$ mysql> create procedure ptest()    -> begin    -> declare p ...

  2. filter()和sort()这两个方法一块学习,案例中。

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 简单的shell语句

    1,重启tomcat 脚本: pid=`ps -ef|grep tomcat |grep -v grep |awk '{print $2}'` ##取tomcat的进程号,awk处理字符串 ,取一行的 ...

  4. canvas基础学习(一)

    一.概述 canvas它和其它的HTML5标签的使用基本一致,但是它相当于在浏览器中建立一个画布,可以再这个画布上画图.创建动画甚至是3D游戏.由于canvas要适配不同终端的分辨率,所以尽可能的在标 ...

  5. UVA - 11014 Make a Crystal (莫比乌斯反演)

    给定一个n*n*n的立方体(中心点为原点O),选择尽量多的点,使得对于任意两点A,B,B不在线段OA上. 可以发现,原问题可转化为三维坐标下的点(x,y,z)中有多少个点的gcd(x,y,z)=1. ...

  6. 如何卸载Python通过setup.py安装的模块

    0,pip uninstall  xxxx     1.找到egg sudo easy_install -m BitVector .... Using /usr/local/lib/python2./ ...

  7. Python 2.7_多进程获取简书专题数据(一)

    学python几个月了正好练练手,发现问题不断提高,先从专题入手,爬取些数据,一开始对简书网站结构不熟悉,抓取推荐,热门,城市3个导航栏,交流发现推荐和热门是排序不同,url会重复,以及每个专题详情页 ...

  8. Redis底层探秘(四):整数集合及压缩列表

    整数集合 整数集合(intset)是集合键的底层实现之一,当一个集合只包含 整数值元素,并且这个集合的元素数量不多时,Redis就会使用郑书记和作为集合键的底层实现. 整数集合的实现 整数集合是red ...

  9. php后台添加样式写法

    和我们的光头后台讨论了样式的问题,总结一下 <span style="color:#6666cc;font-size: 12px" onclick="addwork ...

  10. BZOJ1047:[HAOI2007]理想的正方形

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...