/// <summary>
            ///
            /// </summary>
            /// <param name="reader"></param>
            /// <param name="connection"></param>
            /// <param name="connectionString"></param>
            /// <param name="transaction"></param>
            /// <param name="enableValidation"></param>
            /// <returns></returns>
            internal static Func <DbDataReader, TEntity> Get(DbDataReader reader,
                                                             IDbConnection connection,
                                                             string connectionString,
                                                             IDbTransaction transaction,
                                                             bool enableValidation)
            {
                var result = (Func <DbDataReader, TEntity>)null;
                var key    = GetKey(reader, connection);

                if (cache.TryGetValue(key, out result) == false)
                {
                    result = FunctionFactory.CompileDataReaderToDataEntity <TEntity>(reader, connection, connectionString, transaction, enableValidation);
                    cache.TryAdd(key, result);
                }
                return(result);
            }