/// <summary> /// 异步执行SQL 语句,并返回 <see cref="IEnumerable"/> 对象 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="cmd">SQL 命令</param> /// <param name="definition">命令定义对象,用于解析实体的外键</param> /// <returns></returns> async Task <List <T> > ExecuteListAsync <T>(IDbCommand cmd, SelectDbCommandDefinition definition) { IDataReader reader = null; List <T> objList = new List <T>(); try { reader = await this.ExecuteReaderAsync(cmd); TypeDeserializer deserializer = new TypeDeserializer(reader, definition); objList = await deserializer.DeserializeAsync <T>(); } finally { if (cmd != null) { cmd.Dispose(); } if (reader != null) { reader.Dispose(); } this.InternalDispose(); } return(objList); }
// 执行SQL 语句,并返回单个实体对象 async Task <T> ExecuteAsync <T>(IDbCommand cmd, SelectDbCommandDefinition definition) { IDataReader reader = null; IDbConnection conn = null; try { reader = await this.ExecuteReaderAsync(cmd); conn = cmd != null ? cmd.Connection : null; TypeDeserializer deserializer = new TypeDeserializer(reader, definition); List <T> result = await deserializer.DeserializeAsync <T>(); return(result.FirstOrDefault()); } finally { if (cmd != null) { cmd.Dispose(); } if (reader != null) { reader.Dispose(); } this.InternalDispose(); } }
/// <summary> /// 实例化<see cref="TypeDeserializer"/> 类的新实例 /// </summary> /// <param name="reader">DataReader</param> /// <param name="definition">SQL 命令描述</param> internal TypeDeserializer(IDataReader reader, SelectDbCommandDefinition definition) { _reader = reader; _definition = definition; _deserializers = new Dictionary <string, Func <IDataRecord, object> >(8); _listNavigationKeys = new Dictionary <string, HashSet <string> >(8); }
// 执行SQL 语句,并返回单个实体对象 T Execute <T>(IDbCommand cmd, SelectDbCommandDefinition definition) { IDataReader reader = null; try { reader = this.ExecuteReader(cmd); TypeDeserializer deserializer = new TypeDeserializer(reader, definition); List <T> result = deserializer.Deserialize <T>(); return(result.FirstOrDefault()); } finally { if (cmd != null) { cmd.Dispose(); } if (reader != null) { reader.Dispose(); } this.InternalDispose(); } }
/// <summary> /// 实体化 <see cref="TypeDeserializer"/> 类的新实例 /// </summary> /// <param name="reader">DataReader</param> /// <param name="definition">命令描述对象,用于解析实体的外键</param> public TypeDeserializer(IDataReader reader, SelectDbCommandDefinition definition) { _definition = definition; _reader = reader; }