/// <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));
        }
Example #2
0
 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;
     }
 }