protected virtual object GetAsObject(IDataRecord dataRecord, int columnIndex, MappingContext mappingContext)
 {
     var value = dataRecord.GetAsObject(columnIndex);
     mappingContext.OnGetAsObject(dataRecord, ref value, null, columnIndex);
     return value;
 }
 /// <summary>
 /// Wrapper to call the MappingContext
 /// </summary>
 /// <param name="dataRecord"></param>
 /// <param name="columnIndex"></param>
 /// <param name="mappingContext"></param>
 /// <returns></returns>
 protected virtual string GetAsString(IDataRecord dataRecord, int columnIndex, MappingContext mappingContext)
 {
     var value = dataRecord.GetAsString(columnIndex);
     mappingContext.OnGetAsString(dataRecord, ref value, null, columnIndex); // return type null here, expression can be a little more complex than a known type
     // TODO: see if we keep this type
     return value;
 }