/// <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 async Task <Func <DbDataReader, TEntity> > GetAsync(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 = await FunctionFactory.CompileDataReaderToDataEntityAsync <TEntity>(reader, connection, connectionString, transaction, enableValidation);

                    cache.TryAdd(key, result);
                }
                return(result);
            }