internal static Func <DbDataReader, object> GetReader(int hashKey, Type targetType, DbDataReader reader, bool isIgnoreCase) { hashKey = RepositoryHelper.GetReaderKey(targetType, hashKey); if (!readerCache.ContainsKey(hashKey)) { string propName = null; PropertyInfo propInfo = null; var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; if (isIgnoreCase) { bindingFlags |= BindingFlags.IgnoreCase; } List <string> propNameList = new List <string>(); for (int i = 0; i < reader.FieldCount; i++) { propName = reader.GetName(i); propInfo = targetType.GetProperty(propName, bindingFlags); if (propInfo == null) { continue; } propNameList.Add(propInfo.Name); } var readerHandler = DbTypeMap.ContainsKey(targetType) ? CreateValueReaderHandler(targetType, reader.GetOrdinal(propName)) : CreateTypeReaderHandler(targetType, propNameList, reader); readerCache.TryAdd(hashKey, readerHandler); } return(readerCache[hashKey]); }