/// <summary> /// Wraps <see cref="RecordSetReader"/> by adding <see cref="Tuple"/> to <typeparamref name="TResult"/> /// conversion for individual records. /// </summary> /// <typeparam name="TResult">The type of the result.</typeparam> /// <param name="recordSetReader">The reader over raw data source.</param> /// <param name="context">The context.</param> /// <param name="parameterContext">The parameter context.</param> /// <param name="itemMaterializer">The materialization delegate performing /// <see cref="Tuple"/> instance to instance of <typeparamref name="TResult"/> type conversion.</param> public static object Materialize <TResult>( RecordSetReader recordSetReader, MaterializationContext context, ParameterContext parameterContext, IItemMaterializer <TResult> itemMaterializer) { var enumerationContext = (EnumerationContext)recordSetReader.Context; if (enumerationContext != null) { enumerationContext.MaterializationContext = context; } return(new MaterializingReader <TResult>(recordSetReader, context, parameterContext, itemMaterializer)); }
internal MaterializingReader(RecordSetReader recordSetReader, MaterializationContext context, ParameterContext parameterContext, IItemMaterializer <TItem> itemMaterializer) { this.recordSetReader = recordSetReader; this.context = context; this.parameterContext = parameterContext; this.itemMaterializer = itemMaterializer; if (context.MaterializationQueue == null) { context.MaterializationQueue = materializationQueue = new Queue <Action>(); } else { materializationQueue = null; } }