public static void UseSqlLiteWithLazyLoading(this DbContextOptionsBuilder optionsBuilder,
                                              DataConnectionConfig config, string connStr)
 {
     if (config.UseRowNumberForPaging)
     {
         optionsBuilder.UseSqlite(connStr,
                                  builder =>
         {
             builder.CommandTimeout(config.SQLCommandTimeout);
             if (config.IsTenantShardingTable)
             {
                 builder.MigrationsHistoryTable(
                     $"__EFMigrationsHistory{EngineContext.Current.GetSafeShardingTableSuffix()}");
             }
         });
     }
     else
     {
         optionsBuilder.UseSqlServer(connStr,
                                     builder =>
         {
             builder.CommandTimeout(config.SQLCommandTimeout);
             if (config.IsTenantShardingTable)
             {
                 builder.MigrationsHistoryTable(
                     $"__EFMigrationsHistory{EngineContext.Current.GetSafeShardingTableSuffix()}");
             }
         });
     }
 }
 public static void UseInMemoryWithLazyLoading(this DbContextOptionsBuilder optionsBuilder,
                                               DataConnectionConfig config, string connStr)
 {
     optionsBuilder.UseInMemoryDatabase(connStr, builder =>
     {
         // builder.MigrationsHistoryTable(
         //     $"__EFMigrationsHistory_{EngineContext.Current.GetSafeShardingTableSuffix()}");
     });
 }
 public static IServiceCollection AddGirvsDbContext <TContext>(this IServiceCollection services,
                                                               DataConnectionConfig config)
     where TContext : GirvsDbContext
 {
     return(services.AddDbContext <TContext>((provider, builder) =>
     {
         builder.ConfigDbContextOptionsBuilder <TContext>(config,
                                                          config?.GetSecureRandomReadDataConnectionString());
     }, ServiceLifetime.Scoped, ServiceLifetime.Scoped));
 }
 public static void UseSqlServerWithLazyLoading(this DbContextOptionsBuilder optionsBuilder,
                                                DataConnectionConfig config, string connStr)
 {
     optionsBuilder.UseSqlServer(connStr,
                                 builder =>
     {
         if (config.IsTenantShardingTable)
         {
             builder.MigrationsHistoryTable(
                 $"__EFMigrationsHistory{EngineContext.Current.GetSafeShardingTableSuffix()}");
         }
     });
     optionsBuilder.UseBatchEF_MSSQL();
 }
        public static void ConfigDbContextOptionsBuilder <TDbContext>(this DbContextOptionsBuilder optionsBuilder,
                                                                      DataConnectionConfig config, string connStr = null) where TDbContext : GirvsDbContext
        {
            var dataConnectionConfig = config;

            connStr ??= config.MasterDataConnectionString;

            switch (dataConnectionConfig.UseDataType)
            {
            case UseDataType.MsSql:
                optionsBuilder.UseSqlServerWithLazyLoading(dataConnectionConfig, connStr);
                break;

            case UseDataType.MySql:
                optionsBuilder.UseMySqlWithLazyLoading(dataConnectionConfig, connStr);
                break;

            case UseDataType.SqlLite:
                optionsBuilder.UseSqlLiteWithLazyLoading(dataConnectionConfig, connStr);
                break;

            case UseDataType.Oracle:
                optionsBuilder.UseOracleWithLazyLoading(dataConnectionConfig, connStr);
                break;
            }

            if (dataConnectionConfig.UseLazyLoading)
            {
                optionsBuilder.UseLazyLoadingProxies();
            }

            if (!dataConnectionConfig.UseDataTracking)
            {
                optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
            }

            if (dataConnectionConfig.EnableSensitiveDataLogging)
            {
                var loggerFactory = EngineContext.Current.Resolve <ILoggerFactory>();
                optionsBuilder.UseLoggerFactory(loggerFactory).EnableSensitiveDataLogging();
            }

            if (dataConnectionConfig.IsTenantShardingTable)
            {
                optionsBuilder.ReplaceService <IModelCacheKeyFactory, GirvsTenantModelCacheKeyFactory <TDbContext> >();
                optionsBuilder.ReplaceService <IMigrationsAssembly, GirvsMigrationByTenantAssembly>();
            }
        }
 public static void UseOracleWithLazyLoading(this DbContextOptionsBuilder optionsBuilder,
                                             DataConnectionConfig config, string connStr)
 {
     optionsBuilder.UseOracle(connStr,
                              builder =>
     {
         builder.CommandTimeout(config.SQLCommandTimeout);
         builder.UseOracleSQLCompatibility(config.VersionNumber);
         if (config.IsTenantShardingTable)
         {
             builder.MigrationsHistoryTable(
                 $"__EFMigrationsHistory{EngineContext.Current.GetSafeShardingTableSuffix()}");
         }
     });
     optionsBuilder.UseOracle();
 }
        public static void UseMySqlWithLazyLoading(this DbContextOptionsBuilder optionsBuilder,
                                                   DataConnectionConfig config, string connStr)
        {
            var serverVersion = new MySqlServerVersion(new Version(config.VersionNumber));

            optionsBuilder.UseMySql(connStr, serverVersion,
                                    builder =>
            {
                builder.EnableRetryOnFailure(maxRetryCount: 5);
                if (config.IsTenantShardingTable)
                {
                    builder.MigrationsHistoryTable(
                        $"__EFMigrationsHistory{EngineContext.Current.GetSafeShardingTableSuffix()}");
                }
            });
            optionsBuilder.UseBatchEF_MySQLPomelo();
        }