• 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;
            }
  • 相关阅读:
    Spring IOC容器的初始化-(二)BeanDefinition的载入和解析
    Spring IOC容器的初始化—(一)Resource定位
    SpringMVC的启动过程
    Spring IOC容器在Web容器中是怎样启动的
    Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again 问题分析
    网络丢包分析
    yum安装jdk如何配置JAVA_HOME
    Linux网卡绑定
    Linux Buffer/Cache 的区别
    理解load averages
  • 原文地址:https://www.cnblogs.com/njcxwz/p/6497106.html
Copyright © 2020-2023  润新知