using System; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using SharedLibraryCore.Database; using SharedLibraryCore.Interfaces; namespace IW4MAdmin.Application.Factories { /// /// implementation of the IDatabaseContextFactory interface /// public class DatabaseContextFactory : IDatabaseContextFactory { private readonly IServiceProvider _serviceProvider; public DatabaseContextFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } /// /// creates a new database context /// /// indicates if entity tracking should be enabled /// public DatabaseContext CreateContext(bool? enableTracking = true) { var context = _serviceProvider.GetRequiredService(); enableTracking ??= true; if (enableTracking.Value) { context.ChangeTracker.AutoDetectChangesEnabled = true; context.ChangeTracker.LazyLoadingEnabled = true; context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.TrackAll; } else { context.ChangeTracker.AutoDetectChangesEnabled = false; context.ChangeTracker.LazyLoadingEnabled = false; context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; } return context; } } }