public static Func <IDataRecord, object> CreateMap(DataReaderCache cache) { if (cache == null) { throw new ArgumentNullException(nameof(cache)); } if (!_maps.TryGetValue(cache.GetColumnHash(), out Func <IDataRecord, object> func)) { lock (_lock) { if (!_maps.TryGetValue(cache.GetColumnHash(), out func)) { func = Create(cache); _maps.Add(cache.GetColumnHash(), func); } } } return(func); }
public static Type Get(DataReaderCache cache) { if (cache == null) { throw new ArgumentNullException(nameof(cache)); } if (!_cache.TryGetValue(cache.GetColumnHash(), out Type value)) { lock (_lock) { if (!_cache.TryGetValue(cache.GetColumnHash(), out value)) { value = Create(cache); _cache.Add(cache.GetColumnHash(), value); } } } return(value); }
public static Func <IDataRecord, T> Create(DataReaderCache cache) { if (cache == null) { throw new ArgumentNullException(nameof(cache)); } if (!_cache.TryGetValue(cache.GetColumnHash(), out Func <IDataRecord, T> func)) { lock (_lock) { if (!_cache.TryGetValue(cache.GetColumnHash(), out func)) { func = CreateHelper(cache.Reader); _cache.Add(cache.GetColumnHash(), func); } } } return(func); }
private static Type Create(DataReaderCache cache) { TypeBuilder tb = _mb.DefineType( $"DynamicType_#{cache.GetColumnHash()}", TypeAttributes.Public); for (int fieldIndex = 0; fieldIndex < cache.Reader.FieldCount; fieldIndex++) { tb.DefineField( cache.Reader.GetName(fieldIndex), cache.Reader.GetFieldType(fieldIndex), FieldAttributes.Public); } return(tb.CreateTypeInfo()); }