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);
            }
        }
Ejemplo n.º 2
0
    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));
    }