EF: added support of dbcotextpool
This commit is contained in:
parent
6091fe7d2a
commit
997e20898a
@ -95,7 +95,58 @@ public class BaseDbContext : DbContext
|
||||
|
||||
public static class BaseDbContextExtension
|
||||
{
|
||||
public static T AddOrUpdate<T, TContext>(this TContext b, Expression<Func<TContext, DbSet<T>>> expressionDbSet, T entity) where T : BaseEntity where TContext : BaseDbContext
|
||||
public static void AddBaseDbContext<T>(this IServiceCollection services) where T : DbContext
|
||||
{
|
||||
services.AddPooledDbContextFactory<T>((sp, optionsBuilder) =>
|
||||
{
|
||||
var configuration = sp.GetRequiredService<ConfigurationExtension>();
|
||||
var migrateAssembly = configuration["testAssembly"];
|
||||
var connectionString = configuration.GetConnectionStrings("default");
|
||||
var loggerFactory = sp.GetRequiredService<EFLoggerFactory>();
|
||||
|
||||
optionsBuilder.UseLoggerFactory(loggerFactory);
|
||||
optionsBuilder.EnableSensitiveDataLogging();
|
||||
|
||||
var _provider = Provider.MySql;
|
||||
switch (connectionString.ProviderName)
|
||||
{
|
||||
case "MySql.Data.MySqlClient":
|
||||
_provider = Provider.MySql;
|
||||
break;
|
||||
case "Npgsql":
|
||||
_provider = Provider.PostgreSql;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_provider)
|
||||
{
|
||||
case Provider.MySql:
|
||||
optionsBuilder.ReplaceService<IMigrationsSqlGenerator, CustomMySqlMigrationsSqlGenerator>();
|
||||
optionsBuilder.UseMySql(connectionString.ConnectionString, ServerVersion.Parse("8.0.25"), providerOptions =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(migrateAssembly))
|
||||
{
|
||||
providerOptions.MigrationsAssembly(migrateAssembly);
|
||||
}
|
||||
|
||||
//Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency
|
||||
providerOptions.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
|
||||
});
|
||||
break;
|
||||
case Provider.PostgreSql:
|
||||
optionsBuilder.UseNpgsql(connectionString.ConnectionString, providerOptions =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(migrateAssembly))
|
||||
{
|
||||
providerOptions.MigrationsAssembly(migrateAssembly);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static T AddOrUpdate<T, TContext>(this TContext b, Expression<Func<TContext, DbSet<T>>> expressionDbSet, T entity) where T : BaseEntity where TContext : DbContext
|
||||
{
|
||||
var dbSet = expressionDbSet.Compile().Invoke(b);
|
||||
var existingBlog = dbSet.Find(entity.GetKeys());
|
||||
|
@ -37,6 +37,22 @@ public class ModelBuilderWrapper
|
||||
Provider = provider;
|
||||
}
|
||||
|
||||
public static ModelBuilderWrapper From(ModelBuilder modelBuilder, DatabaseFacade database)
|
||||
{
|
||||
var provider = Provider.MySql;
|
||||
|
||||
if (database.IsMySql())
|
||||
{
|
||||
provider = Provider.MySql;
|
||||
}
|
||||
else if (database.IsNpgsql())
|
||||
{
|
||||
provider = Provider.PostgreSql;
|
||||
}
|
||||
|
||||
return new ModelBuilderWrapper(modelBuilder, provider);
|
||||
}
|
||||
|
||||
public static ModelBuilderWrapper From(ModelBuilder modelBuilder, Provider provider)
|
||||
{
|
||||
return new ModelBuilderWrapper(modelBuilder, provider);
|
||||
|
Loading…
Reference in New Issue
Block a user