//using System;
//using System.Data;
//using System.Threading;
//using System.Threading.Tasks;
//using Microsoft.EntityFrameworkCore;
//using Microsoft.EntityFrameworkCore.Storage;

//namespace IRaCIS.Core.Infra.EFCore
//{
//    public class EFUnitOfWork<TDbContext> :
//        IEFUnitOfWork<TDbContext> where TDbContext : DbContext
//        , IDisposable
//    {
//        public DbContext DbContext { get; }
//        // https://docs.microsoft.com/en-us/ef/core/saving/transactions
//        private  IDbContextTransaction _transaction;

//        public EFUnitOfWork(TDbContext dbContext)
//        {
//            DbContext = dbContext;
//        }


//        public void BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted)
//        {
//            if (DbContext.Database.IsRelational())
//            {
//                _transaction = DbContext.Database.BeginTransaction(isolationLevel);
//            }
//        }

//        public async Task BeginTransactionAsync(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted)
//        {
//            if (DbContext.Database.IsRelational())
//            {
//                _transaction = await DbContext.Database.BeginTransactionAsync(isolationLevel);
//            }
//        }

//        //失败 自动回退
//        public virtual void Commit()
//        {
//            DbContext.SaveChanges();
//            _transaction?.Commit();
//        }

//        public virtual async Task CommitAsync(CancellationToken cancellationToken)
//        {
//            await DbContext.SaveChangesAsync(cancellationToken);

//            await _transaction?.CommitAsync(cancellationToken);

//        }

//        public virtual void Dispose()
//        {
//            _transaction?.Dispose();
//        }


//    }
//}
