private static void IntializeStoreOptions(SIOEntityFrameworkCoreSqlServerOptions builder, EntityFrameworkCoreStoreOptions options)
 {
     foreach (var storeOption in builder.StoreOptions)
     {
         options.WithContext(storeOption.StoreType, o => o.UseSqlServer(storeOption.ConnectionString, storeOption.StoreOptions));
     }
 }
        public static ISIOInfrastructureBuilder AddEntityFrameworkCoreSqlServer(this ISIOInfrastructureBuilder source, Action <SIOEntityFrameworkCoreSqlServerOptions> builderAction)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            source.AddEntityFrameworkCore();

            var sqlBuilder = new SIOEntityFrameworkCoreSqlServerOptions();

            builderAction(sqlBuilder);

            source.AddEntityFrameworkCoreStore(o => IntializeStoreOptions(sqlBuilder, o));

            if (!string.IsNullOrWhiteSpace(sqlBuilder.ProjectionConnectionString))
            {
                source.Services.AddDbContext <SIOProjectionDbContext>(options =>
                {
                    options.UseSqlServer(sqlBuilder.ProjectionConnectionString, sqlBuilder.ProjectionOptions);
                });
            }

            return(source);
        }