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