protected BaseDao(IDataConsumer <TDbReader> consumer, IExtendableTypeResolver types, Func <IDatabase> db) { this.consumer = consumer; this.types = types; this.db = db; }
private object ReadColumnFromReader(TDataReader reader, Column column, int index, IExtendableTypeResolver types) { if (reader.IsDBNull(index)) { return(null); } switch (types.GetDbType(column)) { case DbType.Boolean: return(reader.GetBoolean(index)); case DbType.Byte: return(reader.GetByte(index)); case DbType.SByte: return((sbyte)reader.GetByte(index)); case DbType.Int16: return(reader.GetInt16(index)); case DbType.UInt16: return((ushort)reader.GetInt16(index)); case DbType.Int32: return(reader.GetInt32(index)); case DbType.UInt32: return((uint)reader.GetInt32(index)); case DbType.Int64: return(reader.GetInt64(index)); case DbType.UInt64: return((ulong)reader.GetInt64(index)); case DbType.Single: return(reader.GetFloat(index)); case DbType.Double: return(reader.GetDouble(index)); case DbType.Decimal: case DbType.Currency: return(reader.GetDecimal(index)); case DbType.AnsiString: case DbType.AnsiStringFixedLength: case DbType.String: case DbType.StringFixedLength: return(ReadStringField(reader, column, index)); case DbType.Guid: return(reader.GetGuid(index)); case DbType.DateTime: case DbType.DateTime2: return(reader.IsDBNull(index) ? default : reader.GetDateTime(index)); case DbType.DateTimeOffset: if (dateTimeOffsetMethodCache == null) { dateTimeOffsetMethodCache = reader.GetType() .GetMethods() .Where(m => m.ReturnType == typeof(DateTimeOffset)) .FirstOrDefault(m => { var p = m.GetParameters(); if (p.Count() == 1 && p.First().ParameterType == typeof(int)) { return(true); } return(false); }); } return((DateTimeOffset)dateTimeOffsetMethodCache.Invoke(reader, new object[] { index })); case DbType.Binary: return(ReadBinaryField(reader, column, index)); default: return(null); } }
public override object ReadColumn(SQLiteDataReader reader, Column column, int index, IExtendableTypeResolver types) { if (reader.IsDBNull(index)) { return(null); } switch (types.GetDbType(column)) { case System.Data.DbType.DateTimeOffset: var text = reader.GetString(index); return(DateTimeOffset.Parse(text)); default: return(base.ReadColumn(reader, column, index, types)); } }
public virtual object ReadColumn(TDataReader reader, Column column, int index, IExtendableTypeResolver types) { return(types.DbDeserialize(column.PropertyType, ReadColumnFromReader(reader, column, index, types))); }