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;
}

最新文章

  1. DES &amp; 3DES 加密算法
  2. apache安全配置---禁止访问特定文件,防止日志、压缩包被下载
  3. 使用git从服务器下载已存在的项目文件
  4. Ecshop :后台添加新功能 菜单及 管理权限 配置
  5. DevExtreme官方视频教程分享
  6. Java数据结构——有序链表
  7. 细说Debug和Release区别
  8. 实战-Mysql主从复制
  9. 解决 PclZip 中文乱码问题
  10. java与数据库
  11. maven插件本地化安装
  12. 学习python的第四天
  13. Json,Gson,Ajax基础知识
  14. DbGridEh根据某一个字段的值显示对应底色或字体变化
  15. centos7生产环境下openssh升级
  16. TaskAsyncHelper
  17. redis缓存穿透解决办法--排它锁
  18. unity小地图上的动态图标
  19. Laravel中创建控制器
  20. ACM,我回来了!

热门文章

  1. JQuery小知识点
  2. poj3189二分图多重匹配
  3. SQL Server循环插入数据
  4. windows7安装PyQt5(通过pip install 安装)
  5. JSP学习笔记(九十):eclipse3.4中建立控制台程序
  6. 条款36:绝对不要重新定义,继承而来的non-virtual函数
  7. Unity3D教程:制作与载入AssetBundle
  8. 浅谈FFT(快速傅里叶变换)
  9. BZOJ5091: [Lydsy1711月赛]摘苹果
  10. vue 链接