public static void PopulateObjectWithSqlReader <T>(this IOrmLiteDialectProvider dialectProvider, object objWithProperties, IDataReader reader, Tuple <FieldDefinition, int, IOrmLiteConverter>[] indexCache, object[] values) { values = PopulateValues(reader, values, dialectProvider); var dbNullFilter = OrmLiteConfig.OnDbNullFilter; foreach (var fieldCache in indexCache) { try { var fieldDef = fieldCache.Item1; var index = fieldCache.Item2; var converter = fieldCache.Item3; if (values != null && values[index] == DBNull.Value) { var value = fieldDef.IsNullable ? null : fieldDef.FieldTypeDefaultValue; var useValue = dbNullFilter?.Invoke(fieldDef); if (useValue != null) { value = useValue; } fieldDef.SetValue(objWithProperties, value); } else { var value = converter.GetValue(reader, index, values); if (value == null) { if (!fieldDef.IsNullable) { value = fieldDef.FieldTypeDefaultValue; } var useValue = dbNullFilter?.Invoke(fieldDef); if (useValue != null) { value = useValue; } fieldDef.SetValue(objWithProperties, value); } else { var fieldValue = converter.FromDbValue(fieldDef.FieldType, value); fieldDef.SetValue(objWithProperties, fieldValue); } } } catch (Exception ex) { OrmLiteUtils.HandleException(ex); } } OrmLiteConfig.PopulatedObjectFilter?.Invoke(objWithProperties); }
public static T PopulateWithSqlReader <T>(this T objWithProperties, IOrmLiteDialectProvider dialectProvider, IDataReader reader, Tuple <FieldDefinition, int, IOrmLiteConverter>[] indexCache, object[] values) { try { if (!OrmLiteConfig.DeoptimizeReader) { if (values == null) { values = new object[reader.FieldCount]; } try { dialectProvider.GetValues(reader, values); } catch (Exception ex) { values = null; Log.Warn("Error trying to use GetValues() from DataReader. Falling back to individual field reads...", ex); } } else { //Calling GetValues() on System.Data.SQLite.Core ADO.NET Provider changes behavior of reader.GetGuid() //So allow providers to by-pass reader.GetValues() optimization. values = null; } foreach (var fieldCache in indexCache) { var fieldDef = fieldCache.Item1; var index = fieldCache.Item2; var converter = fieldCache.Item3; if (values != null && values[index] == DBNull.Value) { var value = fieldDef.IsNullable ? null : fieldDef.FieldTypeDefaultValue; if (OrmLiteConfig.OnDbNullFilter != null) { var useValue = OrmLiteConfig.OnDbNullFilter(fieldDef); if (useValue != null) { value = useValue; } } fieldDef.SetValueFn(objWithProperties, value); } else { var value = converter.GetValue(reader, index, values); if (value == null) { if (!fieldDef.IsNullable) { value = fieldDef.FieldTypeDefaultValue; } if (OrmLiteConfig.OnDbNullFilter != null) { var useValue = OrmLiteConfig.OnDbNullFilter(fieldDef); if (useValue != null) { value = useValue; } } fieldDef.SetValueFn(objWithProperties, value); } else { var fieldValue = converter.FromDbValue(fieldDef.FieldType, value); fieldDef.SetValueFn(objWithProperties, fieldValue); } } } } catch (Exception ex) { OrmLiteUtils.HandleException(ex); } return(objWithProperties); }