diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index ba9cee70ee..6cfbe3d01c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -28,7 +28,7 @@ using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore { - public abstract class AbpDbContext : DbContext, IEfCoreDbContext, ITransientDependency + public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, ITransientDependency where TDbContext : DbContext { protected virtual Guid? CurrentTenantId => CurrentTenant?.Id; @@ -144,6 +144,19 @@ namespace Volo.Abp.EntityFrameworkCore } } + public virtual void Initialize(AbpEfCoreDbContextInitializationContext initializationContext) + { + if (initializationContext.UnitOfWork.Options.Timeout.HasValue && + Database.IsRelational() && + !Database.GetCommandTimeout().HasValue) + { + Database.SetCommandTimeout(initializationContext.UnitOfWork.Options.Timeout.Value.TotalSeconds.To()); + } + + ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges; + ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; + } + protected virtual EntityChangeReport ApplyAbpConcepts() { var changeReport = new EntityChangeReport(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEfCoreDbContextInitializationContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEfCoreDbContextInitializationContext.cs new file mode 100644 index 0000000000..d5e7a456ec --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEfCoreDbContextInitializationContext.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore +{ + public class AbpEfCoreDbContextInitializationContext + { + public IUnitOfWork UnitOfWork { get; } + + public AbpEfCoreDbContextInitializationContext(IUnitOfWork unitOfWork) + { + UnitOfWork = unitOfWork; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IAbpEfCoreDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IAbpEfCoreDbContext.cs new file mode 100644 index 0000000000..a1eba1290f --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IAbpEfCoreDbContext.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.EntityFrameworkCore +{ + public interface IAbpEfCoreDbContext : IEfCoreDbContext + { + void Initialize(AbpEfCoreDbContextInitializationContext initializationContext); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index 74cd8bb642..91ed2f8126 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -54,15 +54,15 @@ namespace Volo.Abp.Uow.EntityFrameworkCore { var dbContext = CreateDbContext(unitOfWork); - if (unitOfWork.Options.Timeout.HasValue && - dbContext.Database.IsRelational() && - !dbContext.Database.GetCommandTimeout().HasValue) + if (dbContext is IAbpEfCoreDbContext abpEfCoreDbContext) { - dbContext.Database.SetCommandTimeout(unitOfWork.Options.Timeout.Value.TotalSeconds.To()); + abpEfCoreDbContext.Initialize( + new AbpEfCoreDbContextInitializationContext( + unitOfWork + ) + ); } - dbContext.ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges; - dbContext.ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; return dbContext; } }