예제 #1
0
        public override async Task RunInTransactionAsync(Action <IDbChange> dbChange)
        {
            var transaction = new SqlServerTransactionBuilder(Dialect);

            dbChange(transaction);
            using (var connection = await _connectionProvider.GetOpenConnectionAsync().ConfigureAwait(false))
                using (var trans = connection.BeginTransaction())
                    using (var command = connection.CreateCommand())
                    {
                        command.Transaction = trans;
                        try
                        {
                            command.CommandType = CommandType.Text;
                            foreach (var cmd in transaction.Commands)
                            {
                                command.CommandText = _useStatement + cmd.CommandText;
                                cmd.CommandParameters.ForEach(parameter =>
                                {
                                    command.Parameters.Add(new SqlParameter(parameter.Key, parameter.Value ?? DBNull.Value));
                                });
                                command.ExecuteNonQuery();
                                command.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch
                        {
                            trans?.Rollback();
                            throw;
                        }
                    }
        }
예제 #2
0
 public async Task <int> ExecuteAsync(CancellationToken cancellationToken = default)
 {
     using (var connection = await _dbConnectionProvider.GetOpenConnectionAsync(cancellationToken))
         using (var command = BuildDbCommand(connection))
         {
             return(await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false));
         }
 }
예제 #3
0
        private async Task <TResult> ExecuteReader <TResult>(string useStatement, string commandText, IEnumerable <KeyValuePair <string, object> > parameters, Func <IDbReader, TResult> readerMapper)
        {
            using (var connection = await _connectionProvider.GetOpenConnectionAsync().ConfigureAwait(false))
                using (var command = connection.CreateCommand())
                {
                    command.CommandType = CommandType.Text;
                    command.CommandText = useStatement + commandText;
                    parameters.ForEach(parameter => command.Parameters.Add(new SqlParameter(parameter.Key, parameter.Value ?? DBNull.Value)));

                    using (var reader = command.ExecuteReader())
                    {
                        var r = new DbReader(reader);
                        return(readerMapper(r));
                    }
                }
        }
예제 #4
0
        public override async Task <TResult> ExecuteReaderAsync <TResult>(string commandText, IDictionary <string, object> parameters, Func <IDbReader, TResult> readerMapper)
        {
            using (var connection = await _connectionProvider.GetOpenConnectionAsync().ConfigureAwait(false))
                using (var command = (SqliteCommand)connection.CreateCommand())
                {
                    command.CommandType = CommandType.Text;
                    EnableForeignKeys(command);
                    command.CommandText = commandText;
                    parameters.ForEach(
                        parameter =>
                        command.Parameters.Add(new SqliteParameter(parameter.Key,
                                                                   parameter.Value ?? DBNull.Value)));

                    using (var reader = await command.ExecuteReaderAsync())
                        using (var r = new DbReader(reader))
                        {
                            return(readerMapper(r));
                        }
                }
        }