IEnumerable <T> Project <T>(IDataReader reader, Func <FieldReader, T> fnProjector) { var items = new List <T>(); var freader = new FieldReader(reader); while (reader.Read()) { T item = default(T); try { item = fnProjector(freader); items.Add(item); } catch (Exception ex) { var exceptionContext = new DbExceptionContextInfo { SqlException = new ProjectionException(ex.Message, ex), Message = "data bind exception.", }; throw ExceptionHelper.Convert(log, exceptionConverter, exceptionContext); } } return(items); }
IEnumerable <T> ExecuteBatch <T>(string commandText, NamedParameter[] parameters, IEnumerable <object[]> paramSets, Func <FieldReader, T> fnProjector) { log.LogCommand(commandText, parameters, null); var items = new List <T>(); try { using (DbCommand cmd = this.GetCommand(commandText, parameters, null)) { //if (dialect.SupportPreparingCommands) // cmd.Prepare(); foreach (var paramValues in paramSets) { log.LogParameters(parameters, paramValues); log.LogMessage(""); cmd.Parameters.Clear(); SetParameterValues(parameters, cmd, paramValues); using (var reader = cmd.ExecuteReader()) { var freader = new FieldReader(reader); if (reader.Read()) { items.Add(fnProjector(freader)); } else { items.Add(default(T)); } } } } } catch (ConnectionException) { throw; } catch (DBConcurrencyException) { throw; } catch (Exception ex) { var exceptionContext = new DbExceptionContextInfo { Sql = commandText, SqlException = new PersistenceException(ex.Message, ex), }; throw ExceptionHelper.Convert(log, exceptionConverter, exceptionContext); } return(items); }