/// <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); } }