public static IServiceCollection AddJokerNpDbContext <TContext>(this IServiceCollection services, Action <JokerDbContextOptionBuilder> optionBuilder)
            where TContext : DbContext
        {
            JokerDbContextOptionBuilder contextOptionBuilder = new JokerDbContextOptionBuilder();

            optionBuilder.Invoke(contextOptionBuilder);

            if (string.IsNullOrEmpty(contextOptionBuilder.ConnectionString))
            {
                throw new ArgumentNullException("Connectionstring can not be null", nameof(contextOptionBuilder.ConnectionString));
            }

            string assemblyName = typeof(TContext).Namespace;

            services.AddDbContext <TContext>(options =>
            {
                options.UseNpgsql(contextOptionBuilder.ConnectionString, sqlOptions =>
                {
                    if (contextOptionBuilder.EnableMigration)
                    {
                        sqlOptions.MigrationsAssembly(assemblyName);
                    }
                });
            });

            return(services);
        }
        public static IServiceCollection AddJokerDbContext <TContext>(this IServiceCollection services, Action <JokerDbContextOptionBuilder> optionBuilder)
            where TContext : DbContext
        {
            JokerDbContextOptionBuilder contextOptionBuilder = new JokerDbContextOptionBuilder();

            optionBuilder.Invoke(contextOptionBuilder);

            if (string.IsNullOrEmpty(contextOptionBuilder.ConnectionString))
            {
                throw new ArgumentNullException("Connectionstring can not be null", nameof(contextOptionBuilder.ConnectionString));
            }

            string assemblyName = typeof(TContext).Namespace;

            services.AddDbContext <TContext>(options =>
            {
                options.UseSqlServer(contextOptionBuilder.ConnectionString, sqlOptions =>
                {
                    if (contextOptionBuilder.EnableMigration)
                    {
                        sqlOptions.MigrationsAssembly(assemblyName);
                        sqlOptions.EnableRetryOnFailure(maxRetryCount: contextOptionBuilder.MaxRetryCount,
                                                        maxRetryDelay: contextOptionBuilder.MaxRetryDelay ?? TimeSpan.FromSeconds(30),
                                                        errorNumbersToAdd: null);
                    }
                });
            });
            return(services);
        }