public async Task <World[]> LoadMultipleUpdatesRows(int count) { using (var db = _dbProviderFactory.CreateConnection()) { db.ConnectionString = _connectionString; await db.OpenAsync(); using (var updateCmd = db.CreateCommand()) using (var queryCmd = CreateReadCommand(db)) { var results = new World[count]; for (int i = 0; i < count; i++) { results[i] = await ReadSingleRow(db, queryCmd); queryCmd.Parameters["@Id"].Value = _random.Next(1, 10001); } updateCmd.CommandText = BatchUpdateString.Query(count); for (int i = 0; i < count; i++) { var id = updateCmd.CreateParameter(); id.ParameterName = $"@Id_{i}"; id.DbType = DbType.Int32; updateCmd.Parameters.Add(id); var random = updateCmd.CreateParameter(); random.ParameterName = $"@Random_{i}"; random.DbType = DbType.Int32; updateCmd.Parameters.Add(random); var randomNumber = _random.Next(1, 10001); id.Value = results[i].Id; random.Value = randomNumber; results[i].RandomNumber = randomNumber; } await updateCmd.ExecuteNonQueryAsync(); return(results); } } }
public void ConfigureServices(IServiceCollection services) { services.Configure <AppSettings>(Configuration); // We re-register the Scenarios as an instance singleton here to avoid it being created again due to the // registration done in Program.Main services.AddSingleton(Scenarios); // Common DB services services.AddSingleton <IRandom, DefaultRandom>(); var appSettings = Configuration.Get <AppSettings>(); Console.WriteLine($"Database: {appSettings.Database}"); switch (appSettings.Database) { case DatabaseServer.PostgreSql: services.AddEntityFrameworkNpgsql(); var settings = new NpgsqlConnectionStringBuilder(appSettings.ConnectionString); if (!settings.NoResetOnClose) { throw new ArgumentException("No Reset On Close=true must be specified for Npgsql"); } if (settings.Enlist) { throw new ArgumentException("Enlist=false must be specified for Npgsql"); } services.AddDbContextPool <ApplicationDbContext>(options => options.UseNpgsql(appSettings.ConnectionString)); if (Scenarios.Any("Raw") || Scenarios.Any("Dapper")) { services.AddSingleton <DbProviderFactory>(NpgsqlFactory.Instance); } break; case DatabaseServer.SqlServer: services.AddEntityFrameworkSqlServer(); services.AddDbContextPool <ApplicationDbContext>(options => options.UseSqlServer(appSettings.ConnectionString)); if (Scenarios.Any("Raw") || Scenarios.Any("Dapper")) { services.AddSingleton <DbProviderFactory>(SqlClientFactory.Instance); } break; case DatabaseServer.MySql: services.AddEntityFrameworkMySql(); services.AddDbContextPool <ApplicationDbContext>(options => options.UseMySql(appSettings.ConnectionString)); if (Scenarios.Any("Raw") || Scenarios.Any("Dapper")) { services.AddSingleton <DbProviderFactory>(MySql.Data.MySqlClient.MySqlClientFactory.Instance); } break; case DatabaseServer.MongoDb: var mongoClient = new MongoClient(appSettings.ConnectionString); var mongoDatabase = mongoClient.GetDatabase("hello_world"); services.AddSingleton(mongoClient); services.AddSingleton(mongoDatabase); services.AddSingleton(sp => mongoDatabase.GetCollection <Fortune>("fortune")); services.AddSingleton(sp => mongoDatabase.GetCollection <World>("world")); break; } if (Scenarios.Any("Ef")) { services.AddScoped <EfDb>(); } if (Scenarios.Any("Raw")) { services.AddScoped <RawDb>(); } if (Scenarios.Any("Dapper")) { services.AddScoped <DapperDb>(); } if (Scenarios.Any("Mongo")) { services.AddScoped <MongoDb>(); } if (Scenarios.Any("Update")) { BatchUpdateString.Initalize(); } if (Scenarios.Any("Fortunes")) { var settings = new TextEncoderSettings(UnicodeRanges.BasicLatin, UnicodeRanges.Katakana, UnicodeRanges.Hiragana); settings.AllowCharacter('\u2014'); // allow EM DASH through services.AddWebEncoders((options) => { options.TextEncoderSettings = settings; }); } if (Scenarios.Any("Mvc")) { var mvcBuilder = services .AddMvcCore() #if NETCOREAPP2_1 || NETCOREAPP2_2 .SetCompatibilityVersion(CompatibilityVersion.Latest) #endif ; if (Scenarios.MvcJson || Scenarios.Any("MvcDbSingle") || Scenarios.Any("MvcDbMulti")) { mvcBuilder.AddJsonFormatters(); } if (Scenarios.MvcViews || Scenarios.Any("MvcDbFortunes")) { mvcBuilder .AddViews() .AddRazorViewEngine(); } } if (Scenarios.Any("MemoryCache")) { services.AddMemoryCache(); } if (Scenarios.Any("ResponseCaching")) { services.AddResponseCaching(); } }
public void ConfigureServices(IServiceCollection services) { services.Configure <AppSettings>(Configuration); // We re-register the Scenarios as an instance singleton here to avoid it being created again due to the // registration done in Program.Main services.AddSingleton(Scenarios); // Common DB services services.AddSingleton <IRandom, DefaultRandom>(); services.AddEntityFrameworkSqlServer(); var appSettings = Configuration.Get <AppSettings>(); Console.WriteLine($"Database: {appSettings.Database}"); if (appSettings.Database == DatabaseServer.PostgreSql) { if (Scenarios.Any("Ef")) { services.AddDbContextPool <ApplicationDbContext>(options => options.UseNpgsql(appSettings.ConnectionString)); } if (Scenarios.Any("Raw") || Scenarios.Any("Dapper")) { services.AddSingleton <DbProviderFactory>(NpgsqlFactory.Instance); } } else if (appSettings.Database == DatabaseServer.MySql) { if (Scenarios.Any("Raw") || Scenarios.Any("Dapper")) { services.AddSingleton <DbProviderFactory>(MySqlClientFactory.Instance); } } if (Scenarios.Any("Ef")) { services.AddScoped <EfDb>(); } if (Scenarios.Any("Raw")) { services.AddScoped <RawDb>(); } if (Scenarios.Any("Dapper")) { services.AddScoped <DapperDb>(); } if (Scenarios.Any("Update")) { BatchUpdateString.Initalize(); } if (Scenarios.Any("Fortunes")) { var settings = new TextEncoderSettings(UnicodeRanges.BasicLatin, UnicodeRanges.Katakana, UnicodeRanges.Hiragana); settings.AllowCharacter('\u2014'); // allow EM DASH through services.AddWebEncoders((options) => { options.TextEncoderSettings = settings; }); } if (Scenarios.Any("Mvc")) { var mvcBuilder = services .AddMvcCore() .AddControllersAsServices(); if (Scenarios.MvcJson || Scenarios.Any("MvcDbSingle") || Scenarios.Any("MvcDbMulti")) { mvcBuilder.AddJsonFormatters(); } if (Scenarios.MvcViews || Scenarios.Any("MvcDbFortunes")) { mvcBuilder .AddViews() .AddRazorViewEngine(); } } }
public void Configure(IApplicationBuilder app) { if (Scenarios.Plaintext) { app.UsePlainText(); } if (Scenarios.Json) { app.UseJson(); } // Single query endpoints if (Scenarios.DbSingleQueryRaw) { app.UseSingleQueryRaw(); } if (Scenarios.DbSingleQueryEf) { app.UseSingleQueryEf(); } // Multiple query endpoints if (Scenarios.DbMultiQueryRaw) { app.UseMultipleQueriesRaw(); } if (Scenarios.DbMultiQueryEf) { app.UseMultipleQueriesEf(); } // Multiple update endpoints if (Scenarios.DbMultiUpdateRaw) { app.UseMultipleUpdatesRaw(); } if (Scenarios.DbMultiUpdateEf) { app.UseMultipleUpdatesEf(); } // Fortunes endpoints if (Scenarios.DbFortunesRaw) { app.UseFortunesRaw(); } if (Scenarios.DbFortunesEf) { app.UseFortunesEf(); } if (Scenarios.Any("Mvc")) { app.UseMvc(); } if (Scenarios.Any("Update")) { BatchUpdateString.Initalize(); } if (Scenarios.StaticFiles) { app.UseStaticFiles(); } }