/// <summary>Creates a <typeparamref name="T"/> entity from the <see cref="System.Data.Common.DbDataReader"/>.</summary>
        /// <param name="reader">The reader object.</param>
        /// <returns>Returns a <typeparamref name="T"/> object.</returns>
        public static T ToPoco <T>(this DbDataReader reader) where T : class, new()
        {
            T item = (T)Activator.CreateInstance(typeof(T), new object[0]);

            if (!reader.HasRows)
            {
                return(item);
            }

            Dictionary <string, Delegate> typeConverter = ReaderTypeConverter.GetTypeConverter(typeof(T));

            typeof(T).GetProperties()
            .ToList()
            .ForEach(prop =>
            {
                var setPropFunction = typeConverter[prop.Name] as Delegate;
                if (setPropFunction == null)
                {
                    return;
                }

                var output = setPropFunction.DynamicInvoke(new object[] { prop.Name, reader });

                prop.SetValue(item, output, new object[0]);
            });

            return(item);
        }
        /// <summary>Create a list of <typeparamref name="T"/> entities from the <see cref="System.Data.Common.DbDataReader"/>.</summary>
        /// <param name="reader">The reader object.</param>
        /// <returns>Returns a list of <typeparamref name="T"/> objects.</returns>
        public static List <T> ToList <T>(this DbDataReader reader) where T : class, new()
        {
            List <T> results = new List <T>();

            if (!reader.HasRows)
            {
                return(results);
            }

            Dictionary <string, Delegate> typeConverter = ReaderTypeConverter.GetTypeConverter(typeof(T));// TypeConverters[typeof(TModel).FullName];

            do
            {
                T item = reader.ToPoco <T>();

                results.Add(item);
            } while (reader.Read());

            return(results);
        }