private DbValueConverter BuildNullableValueConverter(Type nullablePropertyType, DbValueConverter baseConv = null) { var valueFromNullable = BuildNullableValueReader(nullablePropertyType); Type colType; ConvertFunc propToColFunc; ConvertFunc colToPropFunc; if (baseConv == null) { colType = baseConv == null?nullablePropertyType.GetUnderlyingType() : baseConv.ColumnType; propToColFunc = x => x == null || x == DBNull.Value ? x : x.GetType().IsValueType ? x : valueFromNullable(x); colToPropFunc = x => x; } else { colType = nullablePropertyType.GetUnderlyingType(); propToColFunc = x => x == null || x == DBNull.Value ? x : x.GetType().IsValueType ? baseConv.PropertyToColumn(x) : baseConv.PropertyToColumn(valueFromNullable(x)); colToPropFunc = baseConv.ColumnToProperty; } var convObj = new DbValueConverter(colType, nullablePropertyType, colToPropFunc, propToColFunc); return(convObj); }
protected DbValueConverter AddDefaultConverter(Type fromType, Type toType) { var conv = new DbValueConverter(fromType, toType, BuildImplicitConverter(fromType, toType), BuildImplicitConverter(toType, fromType)); AddWithLock(conv); //Test var fromV = Activator.CreateInstance(fromType); var toV = conv.ColumnToProperty(fromV); fromV = conv.PropertyToColumn(toV); return(conv); }