Пример #1
0
        /// <summary>
        /// 得到Sql语句
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="selectComplier"></param>
        /// <param name="tableSql"></param>
        /// <param name="whereComplier"></param>
        /// <param name="havingComplier"></param>
        /// <param name="orderbyComplier"></param>
        /// <param name="groupbyComplier"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        protected virtual string GetSql(OrmObjectInfo obj, QueryCompilerInfo selectComplier, string tableSql,
                                        WhereCompilerInfo whereComplier, QueryCompilerInfo groupbyComplier,
                                        QueryCompilerInfo orderbyComplier, WhereCompilerInfo havingComplier,
                                        QueryInfo query)
        {
            var sql        = new StringBuilder();
            var orderbyExp = query.PageSize != 0
                                 ? GetDefaultOrderby(obj, query, orderbyComplier)
                                 : orderbyComplier.Builder.ToString();

            if (query.PageSize == 0)
            {
                BuilderSql(sql, selectComplier.Builder.ToString(), tableSql, whereComplier.Builder.ToString(),
                           groupbyComplier.Builder.ToString(), havingComplier.Builder.ToString(), orderbyExp, query.IsDisinct);
            }
            else
            {
                BuilderPageSql(sql, selectComplier.Builder.ToString(), tableSql, whereComplier.Builder.ToString(),
                               groupbyComplier.Builder.ToString(), havingComplier.Builder.ToString(), orderbyExp, query);
            }
            if (query.IsReturnCount && query.PageSize > 0)
            {
                BuilderCountSql(sql, obj, selectComplier, tableSql, whereComplier.Builder.ToString(),
                                groupbyComplier.Builder.ToString(), havingComplier.Builder.ToString(), query.IsDisinct);
            }
            return(sql.ToString());
        }
Пример #2
0
 public QueryCompilerInfo(OrmObjectInfo obj, string exp, TableInfo table, StringBuilder builder)
 {
     Object  = obj;
     Exp     = exp;
     Table   = table;
     Builder = builder;
 }
Пример #3
0
        /// <summary>
        /// 查询数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public virtual T GetInfos <T>(QueryInfo query, OrmObjectInfo obj = null)
        {
            obj = obj ?? Orm.GetOrm(query.FromExp);
            var infos = ExecuteInfos <T>(obj, query);

            return(infos);
        }
Пример #4
0
        /// <summary>
        /// 设置公共缓存
        /// </summary>
        protected virtual void InsertCommonCache(OrmObjectInfo obj, object key, object entity)
        {
            SetCache(GetEntityCacheKey(obj, key), entity, obj.CacheTime);
            var ormProperties =
                obj.Properties.Where(it => it.Map != null && (it.Map.IsGreedyLoad || it.Map.IsLazyLoad));

            foreach (var ormProperty in ormProperties)
            {
                var mapValue = entity.GetProperty(ormProperty.PropertyName);
                if (ormProperty.Map.MapType == OrmMapType.OneToMany)
                {
                    if (mapValue == null)
                    {
                        continue;
                    }
                    var values = mapValue as IEnumerable <EntityInfo>;
                    if (values == null)
                    {
                        continue;
                    }
                    foreach (var value in values)
                    {
                        InsertCommonCache(ormProperty.Map.GetMapObject(), value.GetProperty(ormProperty.Map.GetMapObject().PrimaryProperty.PropertyName), value);
                    }
                }
                else
                {
                    InsertCommonCache(ormProperty.Map.GetMapObject(), mapValue.GetProperty(ormProperty.Map.GetMapObject().PrimaryProperty.PropertyName), mapValue);
                }
            }
        }
Пример #5
0
 /// <summary>
 /// 选择返回方式
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="query"></param>
 /// <param name="obj"></param>
 /// <param name="sqlcmd"></param>
 /// <returns></returns>
 protected virtual T GetInfosByType <T>(QueryInfo query, OrmObjectInfo obj, SqlCommand sqlcmd)
 {
     if (typeof(T) == typeof(DataTable))
     {
         var da = new SqlDataAdapter(sqlcmd);
         var ds = new DataSet();
         da.Fill(ds);
         return((T)(ds.Tables[0] as object));
     }
     if (query.IsAsParallel)
     {
         var da = new SqlDataAdapter(sqlcmd);
         var ds = new DataSet();
         da.Fill(ds);
         var rev = SetProperty <T>(ds.Tables[0], obj);
         if (query.PageSize != 0 && query.IsReturnCount)
         {
             query.DataCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
         }
         return(rev);
     }
     else
     {
         SqlDataReader reader = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection);
         var           rev    = SetProperty <T>(reader, obj);
         if (query.PageSize != 0 && query.IsReturnCount)
         {
             reader.NextResult();
             reader.Read();
             query.DataCount = Convert.ToInt32(reader[0]);
         }
         return(rev);
     }
 }
Пример #6
0
        /// <summary>
        /// 得到缓存的Key
        /// </summary>
        /// <param name="query"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        protected virtual void SetQueryCustomCacheKey(QueryInfo query, OrmObjectInfo obj)
        {
            var sb = new StringBuilder();

            sb.Append(query.SelectExp);
            sb.Append(query.FromExp);
            sb.Append(query.WhereExp);
            sb.Append(query.GroupByExp);
            sb.Append(query.HavingExp);
            sb.Append(query.OrderByExp);
            sb.Append(query.PageIndex);
            sb.Append(query.PageSize);
            if (query.Parameters != null)
            {
                foreach (var p in query.Parameters)
                {
                    sb.Append(p.Key);
                    var keys = p.Value as Array;
                    if (keys != null)
                    {
                        foreach (var key in keys)
                        {
                            sb.Append(key);
                        }
                    }
                    else
                    {
                        sb.Append(p.Value);
                    }
                }
            }
            var value = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sb.ToString(), "MD5");

            query.Cache.Key = string.Format("{0}{1}", string.Format(CacheTag, query.Cache.Name), value);
        }
Пример #7
0
 /// <summary>
 /// 查询对象
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="obj"></param>
 /// <param name="query"></param>
 /// <param name="context"></param>
 /// <param name="isLazyLoadExecute"></param>
 /// <returns></returns>
 public virtual T GetInfos <T>(OrmObjectInfo obj, QueryInfo query, IContext context, bool isLazyLoadExecute = false)
 {
     query.Object      = obj;
     query.GetDataBase = obj.GetDataBase;
     if (!string.IsNullOrEmpty(obj.RouteName))
     {
         var result  = new List <T>();
         var queries = DbRoute.GetRouteQueries(query);
         if (queries != null)
         {
             if (queries.Count == 1)
             {
                 var infos = GetResult <T>(obj, queries[0], context, isLazyLoadExecute);
                 query.DataCount += queries[0].DataCount;
                 query.Sql        = queries[0].Sql;
                 return(infos);
             }
             query.DataCount = 0;
             BeginInvokeQuery(obj, query, context, isLazyLoadExecute, result, queries, 0);
             query.Sql = queries[0].Sql;
             return(MergeResult(result, obj, query));
         }
     }
     return(GetResult <T>(obj, query, context, isLazyLoadExecute));
 }
Пример #8
0
        /// <summary>
        /// 移除公共缓存
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="key"></param>
        protected virtual void RemoveCommonCache(OrmObjectInfo obj, object key)
        {
            var cacheKey   = GetEntityCacheKey(obj, key);
            var cacheValue = Cacher.Get(cacheKey, Type.GetType(obj.ObjectName));

            if (cacheValue == null)
            {
                return;
            }
            if (obj.IsCache)
            {
                Cacher.Remove(cacheKey);
            }
            var ormMaps =
                obj.Properties.Where(it => it.Map != null && it.Map.IsRemoveCache)
                .Select(it => it.Map).ToList();

            if (ormMaps.Count == 0)
            {
                return;
            }
            foreach (var ormMap in ormMaps)
            {
                var value = cacheValue.GetProperty(ormMap.ObjectProperty.PropertyName);
                if (!obj.IsCache)
                {
                    Cacher.Remove(cacheKey);
                }
                RemoveCommonCache(ormMap.GetMapObject(), value);
            }
        }
Пример #9
0
 /// <summary>
 /// 得到缓存
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="obj"></param>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual QueryCacheInfo <T> GetQueryCache <T>(OrmObjectInfo obj, QueryInfo query)
 {
     if (query.Cache.Type == CacheType.None)
     {
         return(null);
     }
     if (query.Cache.Time == DateTime.MinValue && query.Cache.TimeSpan == 0)
     {
         return(null);
     }
     if (query.Cache.Dependencies != null && query.Cache.Dependencies.Count > 0)
     {
         foreach (var dependency in query.Cache.Dependencies)
         {
             string subVersionKey    = GetVersionCacheKey(dependency);
             var    subLocalVersion  = GetLocalCache <string>(subVersionKey);
             var    subRemoteVersion = GetRemoteCache <string>(subVersionKey);
             if (string.IsNullOrWhiteSpace(subRemoteVersion) || subLocalVersion != subRemoteVersion)
             {
                 return(null);
             }
         }
     }
     if (query.Cache.Type == CacheType.Local || query.Cache.Type == CacheType.LocalAndRemote)
     {
         return(GetLocalCache <QueryCacheInfo <T> >(query.Cache.Key));
     }
     if (query.Cache.Type == CacheType.Remote || query.Cache.Type == CacheType.LocalAndRemote)
     {
         return(GetRemoteCache <QueryCacheInfo <T> >(query.Cache.Key));
     }
     return(GetLocalCache <QueryCacheInfo <T> >(query.Cache.Key) ?? GetRemoteCache <QueryCacheInfo <T> >(query.Cache.Key));
 }
Пример #10
0
 /// <summary>
 /// 加载缓存
 /// </summary>
 /// <param name="obj"></param>
 protected virtual void LoadCache(OrmObjectInfo obj)
 {
     for (int i = 0;; i++)
     {
         var query = new QueryInfo {
             IsGreedyLoad = true, IsLazyLoad = true
         };
         query.From(obj.ObjectName).SetPageSize(1000).SetPageIndex(i);
         var entities = ExecuteInfos <IList <EntityInfo> >(obj, query, true);
         if (entities == null || entities.Count == 0)
         {
             break;
         }
         foreach (var entity in entities)
         {
             var value      = entity.GetType().GetProperty(obj.PrimaryProperty.PropertyName).GetValue(entity, null);
             var cacheKey   = GetEntityCacheKey(obj, value);
             var dataEntity = GetCache <EntityInfo>(cacheKey);
             if (dataEntity != null)
             {
                 InsertCommonCache(obj, value, entity);
             }
         }
     }
 }
Пример #11
0
 /// <summary>
 /// from开始
 /// </summary>
 /// <param name="queryCompiler"></param>
 /// <param name="ormObject"></param>
 /// <param name="name"></param>
 /// <param name="isfromload"></param>
 protected virtual void AppendFromProperty(QueryCompilerInfo queryCompiler, OrmObjectInfo ormObject, string name, bool isfromload)
 {
     foreach (var p in ormObject.Properties)
     {
         var propertyName = string.IsNullOrEmpty(name) ? p.PropertyName : string.Format("{0}.{1}", name, p.PropertyName);
         SelectFromRead(queryCompiler, p, propertyName, isfromload);
     }
 }
Пример #12
0
 /// <summary>
 /// 得到表名
 /// </summary>
 /// <param name="ormObject"></param>
 /// <returns></returns>
 public virtual string GetSetTableName(OrmObjectInfo ormObject)
 {
     if (!string.IsNullOrEmpty(TableIndex) && !string.IsNullOrEmpty(ormObject.RouteName))
     {
         return(string.Format("{0}{1}", ormObject.SetTableName, TableIndex));
     }
     return(ormObject.SetTableName);
 }
Пример #13
0
        /// <summary>
        /// 设置公共缓存
        /// </summary>
        protected virtual void InsertCommonCache(OrmObjectInfo obj, object key, object entity)
        {
            if (obj.CacheType == CacheType.None || entity == null)
            {
                return;
            }
            var cacheKey = GetEntityCacheKey(obj, key);

            if (obj.CacheType == CacheType.Local)
            {
                SetLocalCache(cacheKey, entity, obj.CacheTime);
            }
            else if (obj.CacheType == CacheType.Local)
            {
                SetRemoteCache(cacheKey, entity, obj.CacheTime);
            }
            else
            {
                var versionCacheKey = GetVersionCacheKey(cacheKey);
                var version         = GetRemoteCache <string>(versionCacheKey);
                if (string.IsNullOrWhiteSpace(version))
                {
                    version = DateTime.Now.ToString("yyyyMMddHHmmss");
                    SetRemoteCache(versionCacheKey, version, obj.CacheTime);
                }
                SetLocalCache(versionCacheKey, version, obj.CacheTime);
                SetLocalCache(cacheKey, entity, obj.CacheTime);
            }
            var ormProperties =
                obj.Properties.Where(it => it.Map != null && (it.Map.IsGreedyLoad || it.Map.IsLazyLoad));

            foreach (var ormProperty in ormProperties)
            {
                var mapValue = entity.GetProperty(ormProperty.PropertyName);
                if (ormProperty.Map.MapType == OrmMapType.OneToMany)
                {
                    if (mapValue == null)
                    {
                        continue;
                    }
                    var values = mapValue as IEnumerable <EntityInfo>;
                    if (values == null)
                    {
                        continue;
                    }
                    foreach (var value in values)
                    {
                        InsertCommonCache(ormProperty.Map.GetMapObject(), value.GetProperty(ormProperty.Map.GetMapObject().PrimaryProperty.PropertyName), value);
                    }
                }
                else
                {
                    InsertCommonCache(ormProperty.Map.GetMapObject(), mapValue.GetProperty(ormProperty.Map.GetMapObject().PrimaryProperty.PropertyName), mapValue);
                }
            }
        }
Пример #14
0
        /// <summary>
        /// 加载数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="query"></param>
        /// <param name="isLazyLoadExecute"></param>
        /// <returns></returns>
        protected virtual T ExecuteInfos <T>(OrmObjectInfo obj, QueryInfo query, bool isLazyLoadExecute = false)
        {
            if (query.Cache != null)
            {
                return(GetInfosByCache <T>(query, obj));
            }
            var result = Executor.GetInfos <T>(obj, query, this, isLazyLoadExecute);

            return(result);
        }
Пример #15
0
 /// <summary>
 /// 得到key的值
 /// </summary>
 /// <param name="orm"></param>
 /// <returns></returns>
 protected virtual string GetKeyValue(OrmObjectInfo orm)
 {
     InitliazeKey(orm);
     lock (KeyLockers[orm.ObjectName])
     {
         var key = Keys[orm.ObjectName];
         key.Count++;
         return(string.Format("{0}{1}", key.Flag, key.Count.ToString(CultureInfo.InvariantCulture).PadLeft(key.RightLength, '0')));
     }
 }
Пример #16
0
        /// <summary>
        /// 得到Key
        /// </summary>
        public object GetKey(string name)
        {
            OrmObjectInfo orm = Orm.GetOrm(name);

            if (orm == null || orm.Key == null)
            {
                return(null);
            }
            return(GetKeyValue(orm));
        }
Пример #17
0
        /// <summary>
        /// 获取对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public override T GetInfos <T>(OrmDataBaseInfo ormDataBase, OrmObjectInfo obj, QueryInfo query)
        {
            if (obj == null)
            {
                return(default(T));
            }
            var cmd = new SqlCommand();

            Translate(cmd, obj, query);
            return(GetInfosByCommand <T>(ormDataBase, obj, cmd, query));
        }
Пример #18
0
        /// <summary>
        /// 得到属性类型
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        protected virtual Type GetPropertyTypeByName(OrmObjectInfo obj, string name)
        {
            var  names    = name.Split('.');
            Type property = Type.GetType(obj.ObjectName).GetProperties().First(it => it.Name.Equals(names[0])).PropertyType;

            for (int i = 1; i < names.Length; i++)
            {
                property = property.GetProperties().First(it => it.Name.Equals(names[i])).PropertyType;
            }
            return(property);
        }
Пример #19
0
        /// <summary>
        /// 得到结果
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="query"></param>
        /// <param name="context"></param>
        /// <param name="isLazyLoadExecute"></param>
        /// <returns></returns>
        protected virtual T GetResult <T>(OrmObjectInfo obj, QueryInfo query, IContext context, bool isLazyLoadExecute = false)
        {
            OrmDataBaseInfo db     = DataBase.GetDataBase(query.GetDataBase).GetAllGetOrmDataBase().FirstOrDefault();
            var             result = ExecuteQuery <T>(query, obj, db);

            if (query.IsLazyLoad)
            {
                LazyLoad(result, obj, context, isLazyLoadExecute);
            }
            RemoteLoad(result, query.RemoteQueries == null ? null : query.RemoteQueries.Values.ToList(), obj, isLazyLoadExecute);
            return(result);
        }
Пример #20
0
 /// <summary>
 /// 得到表名
 /// </summary>
 /// <param name="ormObject"></param>
 /// <returns></returns>
 public virtual string GetGetTableName(OrmObjectInfo ormObject)
 {
     if (ormObject.ObjectName != Object.ObjectName && DbRoute != null && !DbRoute.IsMapTableAutoSharding)
     {
         return(ormObject.GetTableName);
     }
     if (!string.IsNullOrEmpty(TableIndex) && !string.IsNullOrEmpty(ormObject.RouteName))
     {
         return(string.Format("{0}{1}", ormObject.GetTableName, TableIndex));
     }
     return(ormObject.GetTableName);
 }
Пример #21
0
 /// <summary>
 /// CommandInfo得到返回结果
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="ormDataBase"></param>
 /// <param name="obj"></param>
 /// <param name="cmd"></param>
 /// <param name="query"></param>
 /// <returns></returns>
 protected virtual T GetInfosByCommand <T>(OrmDataBaseInfo ormDataBase, OrmObjectInfo obj, SqlCommand cmd, QueryInfo query)
 {
     if (string.IsNullOrEmpty(cmd.CommandText))
     {
         return(default(T));
     }
     using (var sqlcon = GetConnnection <SqlConnection>(ormDataBase.GetAllGetOrmDataBase(), query))
     {
         cmd.Connection = sqlcon;
         return(GetInfosByType <T>(query, obj, cmd));
     }
 }
Пример #22
0
 /// <summary>
 /// 解析查询
 /// </summary>
 /// <param name="command"></param>
 /// <param name="obj"></param>
 /// <param name="query"></param>
 public virtual void Translate(DbCommand command, OrmObjectInfo obj, QueryInfo query)
 {
     TranslateQuery(obj, query);
     command.CommandText = query.Sql;
     if (query.Parameters == null)
     {
         return;
     }
     foreach (var paramter in query.SqlParameters)
     {
         AddParamter(command, paramter.Key, paramter.Value);
     }
 }
Пример #23
0
        /// <summary>
        /// 得到实体集合
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public IList <T> Gets <T>(QueryInfo query, OrmObjectInfo obj = null)
        {
            obj = obj ?? Orm.GetOrm(query.FromExp);
            var infos = ExecuteInfos <IList <T> >(obj, query, obj.IsCache);

            if (infos != null)
            {
                for (var i = 0; i < infos.Count; i++)
                {
                    infos[i] = Attach(infos[i]);
                }
            }
            return(infos);
        }
Пример #24
0
        /// <summary>
        /// 得到实体键
        /// </summary>
        /// <param name="orm"></param>
        /// <returns></returns>
        protected virtual int GetEntityKey(OrmObjectInfo orm)
        {
            var key = OrmKeys.FirstOrDefault(it => it.Name.Equals(orm.Key));

            if (key == null || string.IsNullOrEmpty(key.Recovery) || orm.PrimaryProperty.IsIdentityKey)
            {
                return(0);
            }
            var sql = key.Recovery.Replace("{Key}", orm.PrimaryProperty.PropertyName).Replace("{Table}", orm.SetTableName);
            var dt  = Executor.ExecuteQuery <DataTable>(orm.SetDataBase, sql, CommandType.Text);

            return(dt != null && dt.Rows.Count > 0 ?
                   Convert.ToInt32(dt.Rows[0][0].ToString()) : 0);
        }
Пример #25
0
        /// <summary>
        /// 设置默认查询
        /// </summary>
        /// <param name="where"></param>
        /// <param name="obj"></param>
        protected virtual void AppendDefaultWhere(StringBuilder where, OrmObjectInfo obj)
        {
            if (where.Length > 0)
            {
                where.Append(")");
            }
            if (string.IsNullOrEmpty(obj.SetDefaultWhere))//设置默认查询
            {
                return;
            }
            string key = where.Length > 0 ? "and" : "where";

            where.AppendFormat(" {0} {1}", key, obj.SetDefaultWhere);
        }
Пример #26
0
        /// <summary>
        /// 移除公共缓存
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="key"></param>
        protected virtual void RemoveCommonCache(OrmObjectInfo obj, object key)
        {
            var    cacheKey   = GetEntityCacheKey(obj, key);
            object cacheValue = null;

            if (obj.CacheType == CacheType.Local)
            {
                cacheValue = GetLocalCache(cacheKey, Type.GetType(obj.ObjectName));
                if (cacheValue == null)
                {
                    return;
                }
                RemoveLocalCache(cacheKey);
            }
            else if (obj.CacheType == CacheType.Remote)
            {
                cacheValue = GetRemoteCache(cacheKey, Type.GetType(obj.ObjectName));
                if (cacheValue == null)
                {
                    return;
                }
                RemoveRemoteCache(cacheKey);
            }
            else if (obj.CacheType == CacheType.LocalAndRemote)
            {
                var varsionKey = GetVersionCacheKey(cacheKey);
                cacheValue = GetLocalCache(cacheKey, Type.GetType(obj.ObjectName));
                if (cacheValue == null)
                {
                    return;
                }
                RemoveRemoteCache(varsionKey);
                RemoveLocalCache(varsionKey);
                RemoveLocalCache(cacheKey);
            }
            var ormMaps =
                obj.Properties.Where(it => it.Map != null && it.Map.IsRemoveCache)
                .Select(it => it.Map).ToList();

            if (ormMaps.Count == 0)
            {
                return;
            }
            foreach (var ormMap in ormMaps)
            {
                var value = cacheValue.GetProperty(ormMap.ObjectProperty.PropertyName);
                RemoveCommonCache(ormMap.GetMapObject(), value);
            }
        }
Пример #27
0
        /// <summary>
        /// 异步调用
        /// </summary>
        /// <param name="isLazyLoadExecute"></param>
        /// <param name="result"></param>
        /// <param name="queries"></param>
        /// <param name="i"></param>
        /// <param name="obj"></param>
        /// <param name="query"></param>
        /// <param name="context"></param>
        protected virtual void BeginInvokeQuery <T>(OrmObjectInfo obj, QueryInfo query, IContext context, bool isLazyLoadExecute, IList <T> result, IList <QueryInfo> queries, int i)
        {
            if (i >= queries.Count)
            {
                return;
            }
            Func <OrmObjectInfo, QueryInfo, IContext, bool, T> func = GetResult <T>;
            var asyncResult = func.BeginInvoke(obj, queries[i], context, isLazyLoadExecute, null, null);

            BeginInvokeQuery(obj, query, context, isLazyLoadExecute, result, queries, i + 1);
            var r = func.EndInvoke(asyncResult);

            result.Add(r);
            query.DataCount += queries[i].DataCount;
        }
Пример #28
0
        /// <summary>
        /// 填充返回值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="reader"></param>
        /// <param name="obj"></param>
        public virtual T Reverse <T>(IDataReader reader, OrmObjectInfo obj)
        {
            var type = Type.GetType(obj.ObjectName);
            var rev  = new ArrayList();

            while (reader.Read())
            {
                var value = GetOrmObjectElement(type, reader, obj);
                if (value != null)
                {
                    rev.Add(value);
                }
            }
            return((T)((object)rev.ToArray(type)));
        }
Пример #29
0
        /// <summary>
        /// 填充对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="table"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public virtual T Reverse <T>(DataTable table, OrmObjectInfo obj)
        {
            var type = Type.GetType(obj.ObjectName);
            var rev  = new ArrayList();

            foreach (DataRow row in table.Rows.AsParallel())
            {
                var value = GetOrmObjectElement(type, table, row, obj);
                if (value != null)
                {
                    rev.Add(value);
                }
            }
            return((T)((object)rev.ToArray(type)));
        }
Пример #30
0
        /// <summary>
        /// 填充对象返回
        /// </summary>
        /// <param name="elementType"></param>
        /// <param name="reader"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        protected virtual object FillOrmObject(Type elementType, IDataReader reader, OrmObjectInfo obj)
        {
            var type = Type.GetType(obj.ObjectName);
            var rev  = new ArrayList();

            while (reader.Read())
            {
                var value = GetOrmObjectElement(type, reader, obj);
                if (value != null)
                {
                    rev.Add(value);
                }
            }
            return(rev.ToArray(elementType));
        }