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;
            }
  • 相关阅读:
    [LINUX-05]Linux的进程线程及调度
    如何感性地理解EM算法?
    [LINUX-04]linux进程、调度、线程、进程上下文等几点理解
    centos定时删除log文件
    关于 Nginx 配置的一些疑惑, Nginx 根据cookie 进行rewrite
    oracle中如何创建表的自增ID(通过序列)
    Windows下PHP7/5.6以上版本 如何连接Oracle 12c,并使用PDO
    Tomcat不能访问ln -s软连接文件夹的前因后果
    rm命令删除文件时排除特定文件
    nginx中的url转发
  • 原文地址:https://www.cnblogs.com/njcxwz/p/6497106.html
Copyright © 2011-2022 走看看