From 78457f92748219605d5b18e7f131cb8ca18ce77a Mon Sep 17 00:00:00 2001 From: Marc Gravell Date: Thu, 26 Nov 2015 12:24:09 +0000 Subject: [PATCH] Dapper: use QueryFirstOrDefault (in 1.50-beta4); let dapper worry about connection opening if single-op; use AsList to use pre-existing buffered list when available --- src/Benchmarks/FortunesDapperMiddleware.cs | 7 +++---- src/Benchmarks/MultipleQueriesDapperMiddleware.cs | 4 +--- src/Benchmarks/SingleQueryDapperMiddleware.cs | 9 ++------- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/Benchmarks/FortunesDapperMiddleware.cs b/src/Benchmarks/FortunesDapperMiddleware.cs index 1b1f2bc17..94d08aa31 100644 --- a/src/Benchmarks/FortunesDapperMiddleware.cs +++ b/src/Benchmarks/FortunesDapperMiddleware.cs @@ -46,14 +46,13 @@ public async Task Invoke(HttpContext httpContext, HtmlEncoder htmlEncoder) private static async Task> LoadRows(string connectionString, DbProviderFactory dbProviderFactory) { - var result = new List(); + List result; using (var db = dbProviderFactory.CreateConnection()) { db.ConnectionString = connectionString; - await db.OpenAsync(); - - result.AddRange(await db.QueryAsync("SELECT [Id], [Message] FROM [Fortune]")); + // note: don't need to open connection if only doing one thing; let dapper do it + result = (await db.QueryAsync("SELECT [Id], [Message] FROM [Fortune]")).AsList(); } result.Add(new Fortune { Message = "Additional fortune added at request time." }); diff --git a/src/Benchmarks/MultipleQueriesDapperMiddleware.cs b/src/Benchmarks/MultipleQueriesDapperMiddleware.cs index 603edfb4c..7f558faa9 100644 --- a/src/Benchmarks/MultipleQueriesDapperMiddleware.cs +++ b/src/Benchmarks/MultipleQueriesDapperMiddleware.cs @@ -85,11 +85,9 @@ private static async Task LoadRows(int count, string connectionString, for (int i = 0; i < count; i++) { - var world = await db.QueryAsync( + result[i] = await db.QueryFirstOrDefaultAsync( "SELECT [Id], [RandomNumber] FROM [World] WHERE [Id] = @Id", new { Id = _random.Next(1, 10001) }); - - result[i] = world.First(); } db.Close(); diff --git a/src/Benchmarks/SingleQueryDapperMiddleware.cs b/src/Benchmarks/SingleQueryDapperMiddleware.cs index 995daf4ad..dff57ef44 100644 --- a/src/Benchmarks/SingleQueryDapperMiddleware.cs +++ b/src/Benchmarks/SingleQueryDapperMiddleware.cs @@ -61,15 +61,10 @@ private static async Task LoadRow(string connectionString, DbProviderFact using (var db = dbProviderFactory.CreateConnection()) { db.ConnectionString = connectionString; - await db.OpenAsync(); - - var world = await db.QueryAsync( + // note: don't need to open connection if only doing one thing; let dapper do it + return await db.QueryFirstOrDefaultAsync( "SELECT [Id], [RandomNumber] FROM [World] WHERE [Id] = @Id", new { Id = _random.Next(1, 10001) }); - - db.Close(); - - return world.First(); } } }