Пример #1
0
        /// <summary>
        /// 将从数据库中获取的数据行转化为指定的实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr">The dr.</param>
        /// <returns></returns>
        protected virtual T FillEntityFromDataReader(SqlDataReader dr)
        {
            var builder = DynamicBuilder <T> .CreateBuilder(dr);

            var instance = builder.Build(dr);

            return(instance);
        }
Пример #2
0
        /// <summary>
        /// 将DataReader的属性值转化为实体类的属性值,返回实体类
        /// (提供了默认的反射机制获取信息,为了提高性能,建议重写该函数)
        /// </summary>
        /// <param name="dr">有效的DataReader对象</param>
        /// <returns>
        /// 实体类对象
        /// </returns>
        protected virtual T DataReaderToEntity(IDataReader dr)
        {
            var obj     = new T();
            var builder = DynamicBuilder <T> .CreateBuilder(dr);

            while (dr.Read())
            {
                obj = builder.Build(dr);
            }

            return(obj);
        }
Пример #3
0
        /// <summary>
        /// 通用获取集合对象方法
        /// </summary>
        /// <param name="sql">查询的Sql语句</param>
        /// <param name="commandType">Type of the command.</param>
        /// <param name="paramList">参数列表,如果没有则为null</param>
        /// <param name="connection">The connection.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns></returns>
        public List <T> GetList(string sql, CommandType commandType, IDbDataParameter[] paramList, DbConnection connection, DbTransaction transaction)
        {
            DateTime start = DateTime.Now;
            var      list  = new List <T>();

            try
            {
                var dbc =
                    transaction == null
                        ? new SqlCommand(sql, (SqlConnection)connection)
                {
                    CommandType = commandType
                }
                        : new SqlCommand(sql, (SqlConnection)connection, (SqlTransaction)transaction)
                {
                    CommandType = commandType
                };

                if (paramList != null)
                {
                    dbc.Parameters.AddRange(paramList);
                }

                using (IDataReader dr = dbc.ExecuteReader())
                {
                    DynamicBuilder <T> builder = DynamicBuilder <T> .CreateBuilder(dr);

                    while (dr.Read())
                    {
                        T entity = builder.Build(dr);
                        if (!list.Contains(entity))
                        {
                            list.Add(entity);
                        }
                    }
                }

                dbc.Parameters.Clear();
            }
            catch (Exception ex)
            {
                Logger.Error(sql);
                Logger.Error(ex);
            }

            Logger.Debug($"Execute {commandType} : {sql} cost {DateTime.Now.Subtract(start).TotalMilliseconds} ms.");
            return(list);
        }
Пример #4
0
        /// <summary>
        /// Fills the entity from reader.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr">The dr.</param>
        /// <returns></returns>
        protected virtual List <T> FillEntitiesFromReader(SqlDataReader dr)
        {
            var list = new List <T>();
            DynamicBuilder <T> builder = DynamicBuilder <T> .CreateBuilder(dr);

            using (SqlDataReader reader = dr)
            {
                while (reader.Read())
                {
                    var instance = builder.Build(reader);
                    if (!list.Contains(instance))
                    {
                        list.Add(instance);
                    }
                }
            }

            return(list);
        }