zoukankan      html  css  js  c++  java
  • EF事务封装

    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 = 0;
                if (originalTransaction == null)
                {
                    result += myDbContext.SaveChanges();
                    ThreadTransaction.SetTransactionFlag(false);
                    DbContextTransaction transaction = myDbContext.Database.CurrentTransaction;
                    if (transaction != null)
                    {
                        transaction.Commit();
                        transaction.Dispose();
                        result += 1;
                    }
    
                }
                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;
            }
  • 相关阅读:
    每日算法-02旋转矩阵
    广搜
    每日算法-01
    洛谷P1162填涂颜色
    队列
    知识网站复习
    mysql索引底层的数据结构和算法
    Java中的类反射
    常见的加密方式
    计算机数制和运算的一点总结.
  • 原文地址:https://www.cnblogs.com/njcxwz/p/6497106.html
Copyright © 2011-2022 走看看