public static IDatabaseCommand CreateCommand(this IDatabase database, IDatabaseQuery query, DatabaseCommandFlags flags, ITransactionSource transaction = null) { var factory = new Func <IDatabaseCommand>(() => { var command = database.Connection.CreateCommand(); command.CommandText = query.CommandText; var parameters = database.CreateParameters(command, query); if (transaction != null) { transaction.Bind(command); } return(new DatabaseCommand(command, parameters, flags)); }); if (transaction != null && !flags.HasFlag(DatabaseCommandFlags.NoCache)) { var command = transaction.CommandCache.GetOrAdd(query, factory); command.Parameters.Reset(); return(command); } return(factory()); }
public DatabaseCommand(IDbCommand command, IDatabaseParameters parameters, DatabaseCommandFlags flags) { this.Command = command; this.Parameters = parameters; this.Flags = flags; }