public async Task <IList <string> > Test(int delay, CancellationToken cancellationToken) { var result = new List <string>(); using (this.profiler.Profile(new ProfileOperationSpecification("test"))) { using (var connection = new ProfiledDbConnection(new SqlConnection(ConfigurationManager.ConnectionStrings["Test"].ConnectionString))) { { var id = (await connection.QueryAsync <int>( "select top 1 Id from TestRocksProfilingTable where 1 = 1 order by Id desc; " + $"waitfor delay '{TimeSpan.FromMilliseconds(delay)}';")).FirstOrNull(); result.Add($"Selected via ADO+Dapper: {id}"); } using (var command = connection.CreateCommand()) { if (connection.State != ConnectionState.Open) { await connection.OpenAsync(cancellationToken); } command.CommandText = "select top 1 Id from TestRocksProfilingTable where 2 = 2 order by Id desc; " + $"waitfor delay '{TimeSpan.FromMilliseconds(delay)}';"; var id = await command.ExecuteScalarAsync(cancellationToken) as int?; result.Add($"Selected via ADO: {id}"); } using (var command = connection.CreateCommand()) { if (connection.State != ConnectionState.Open) { await connection.OpenAsync(cancellationToken); } command.CommandText = "select top 1 Id from TestRocksProfilingTable where 3 = 3 order by Id desc; " + $"waitfor delay '{TimeSpan.FromMilliseconds(delay)}';"; var id = await command.ExecuteScalarAsync(cancellationToken) as int?; result.Add($"Selected via ADO (2): {id}"); } } return(result); } }
public async Task <LabExecution> GetLabExecutionForUserAsync(int userId, int labId, CancellationToken cancellationToken) { // We have to match against user IDs, which does not seem to be supported by EF var dbConn = new ProfiledDbConnection(_dbContext.Database.GetDbConnection(), MiniProfiler.Current); var labExecutionEntity = (await dbConn.QueryAsync <LabExecutionEntity>(@" SELECT le.* FROM `LabExecutions` le INNER JOIN `Groups` g ON g.`Id` = le.`GroupId` WHERE le.`LabId` = @labId AND g.`Id` = ( SELECT u.`GroupId` FROM `Users` u WHERE u.`Id` = @userId )", new { labId, userId })).FirstOrDefault(); return(_mapper.Map <LabExecutionEntity, LabExecution>(labExecutionEntity)); }