예제 #1
0
        /// <inheritdoc />
        public static IDisposable Use(DbContextCreationContext context)
        {
            var previousValue = Current;

            _current.Value = context;
            return(new DisposeAction(() => _current.Value = previousValue));
        }
        private DbContextBase CreateDbContext(IUnitOfWork unitOfWork)
        {
            var creationContext = new DbContextCreationContext();

            using (DbContextCreationContext.Use(creationContext))
            {
                var dbContext = unitOfWork.Options.IsTransactional
                ? CreateDbContextWithTransaction(unitOfWork)
                : unitOfWork.ServiceProvider.GetRequiredService <DbContextBase>();

                if (unitOfWork.Options.Timeout.HasValue &&
                    dbContext.Database.IsRelational() &&
                    !dbContext.Database.GetCommandTimeout().HasValue)
                {
                    dbContext.Database.SetCommandTimeout((int)unitOfWork.Options.Timeout.Value.TotalSeconds);
                }

                return(dbContext);
            }
        }