Beispiel #1
0
        /// <summary>
        /// 使用 sql 语句来查询实体。
        /// </summary>
        /// <param name="sql">sql 语句,返回的结果集的字段,需要保证与属性映射的字段名相同。</param>
        /// <param name="paging">分页信息。</param>
        /// <param name="eagerLoad">需要贪婪加载的属性。</param>
        /// <returns></returns>
        public EntityList QueryList(FormattedSql sql, PagingInfo paging = null, EagerLoadOptions eagerLoad = null)
        {
            var args = new SqlQueryArgs(sql);

            args.SetDataLoadOptions(paging, eagerLoad);
            return(this.QueryList(args));
        }
Beispiel #2
0
        /// <summary>
        /// 使用 sql 语句来查询实体。
        /// </summary>
        /// <param name="args">The arguments.</param>
        /// <returns></returns>
        /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception>
        public EntityList QueryList(SqlQueryArgs args)
        {
            this.PrepareArgs(args);

            var entityList = args.EntityList;
            var oldCount   = entityList.Count;

            bool autoIndexEnabled = entityList.AutoTreeIndexEnabled;

            try
            {
                //在加载数据时,自动索引功能都不可用。
                entityList.AutoTreeIndexEnabled = false;

                QueryListCore(args, entityList);
            }
            finally
            {
                entityList.AutoTreeIndexEnabled = autoIndexEnabled;
            }

            this.EagerLoadOnCompleted(args, entityList, oldCount);

            return(entityList);
        }
Beispiel #3
0
        /// <summary>
        /// 从持久层中查询数据。
        /// 本方法只能由仓库中的方法来调用。本方法的返回值的类型将与仓库中方法的返回值保持一致。
        /// 支持的返回值:EntityList、Entity、int、LiteDataTable。
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public object QueryData(SqlQueryArgs args)
        {
            this.PrepareArgs(args);

            var entityList = args.EntityList;
            var oldCount   = entityList.Count;

            bool autoIndexEnabled = entityList.AutoTreeIndexEnabled;

            try
            {
                //在加载数据时,自动索引功能都不可用。
                entityList.AutoTreeIndexEnabled = false;

                this.QueryDataCore(args, entityList);
            }
            finally
            {
                entityList.AutoTreeIndexEnabled = autoIndexEnabled;
            }

            this.EagerLoadOnCompleted(args, entityList, oldCount);

            return(ReturnForRepository(entityList));
        }
Beispiel #4
0
        /// <summary>
        /// 子类重写此方法,查询从持久层加载列表的具体实现。
        /// </summary>
        /// <param name="args">The arguments.</param>
        /// <param name="entityList">The entity list.</param>
        protected virtual void QueryListCore(SqlQueryArgs args, EntityList entityList)
        {
            var dataProvider = RdbDataProvider.Get(Repo);

            using (var dba = dataProvider.CreateDbAccesser())
            {
                //访问数据库
                if (args.Filter != null)
                {
                    #region 内存过滤式加载

                    if (!PagingInfo.IsNullOrEmpty(args.PagingInfo))
                    {
                        throw new NotSupportedException("使用内存过滤器的同时,不支持提供分页参数。");
                    }

                    args.EntityType = Repo.EntityType;
                    args.MemoryList = new List <Entity>();
                    dataProvider.DbTable.QueryList(dba, args);
                    this.LoadByFilter(args);

                    #endregion
                }
                else
                {
                    if (args.FetchType == FetchType.Count)
                    {
                        #region 查询 Count

                        var value = dba.QueryValue(args.FormattedSql, args.Parameters);
                        var count = RdbTable.ConvertCount(value);
                        entityList.SetTotalCount(count);

                        #endregion
                    }
                    else
                    {
                        //是否需要为 PagingInfo 设置统计值。
                        var pagingInfoCount = !PagingInfo.IsNullOrEmpty(args.PagingInfo) && args.PagingInfo.IsNeedCount;

                        //如果 pagingInfoCount 为真,则在访问数据库时,会设置好 PagingInfo 的总行数。
                        args.EntityType = Repo.EntityType;
                        dataProvider.DbTable.QueryList(dba, args);

                        //最后,还需要设置列表的 TotalCount。
                        if (pagingInfoCount)
                        {
                            entityList.SetTotalCount(args.PagingInfo.TotalCount);
                        }
                    }
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// 使用 sql 语句来查询实体。
        /// </summary>
        /// <param name="args">The arguments.</param>
        /// <returns></returns>
        /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception>
        public EntityList QueryList(SqlQueryArgs args)
        {
            this.PrepareArgs(args);

            var entityList = args.EntityList;
            var oldCount = entityList.Count;

            bool autoIndexEnabled = entityList.AutoTreeIndexEnabled;
            try
            {
                //在加载数据时,自动索引功能都不可用。
                entityList.AutoTreeIndexEnabled = false;

                QueryListCore(args, entityList);
            }
            finally
            {
                entityList.AutoTreeIndexEnabled = autoIndexEnabled;
            }

            this.EagerLoadOnCompleted(args, entityList, oldCount);

            return entityList;
        }
Beispiel #6
0
 /// <summary>
 /// 从持久层中查询数据。
 /// 本方法只能由仓库中的方法来调用。本方法的返回值的类型将与仓库中方法的返回值保持一致。
 /// 支持的返回值:EntityList、Entity、int、LiteDataTable。
 /// </summary>
 /// <param name="args"></param>
 /// <returns></returns>
 public object QueryData(SqlQueryArgs args)
 {
     return(this.DataQueryer.QueryData(args));
 }
Beispiel #7
0
 /// <summary>
 /// 使用 sql 语句来查询实体。
 /// </summary>
 /// <param name="sql">sql 语句,返回的结果集的字段,需要保证与属性映射的字段名相同。</param>
 /// <param name="paging">分页信息。</param>
 /// <param name="eagerLoad">需要贪婪加载的属性。</param>
 /// <returns></returns>
 public EntityList QueryList(FormattedSql sql, PagingInfo paging = null, EagerLoadOptions eagerLoad = null)
 {
     var args = new SqlQueryArgs(sql);
     args.SetDataLoadOptions(paging, eagerLoad);
     return this.QueryList(args);
 }
Beispiel #8
0
        /// <summary>
        /// 子类重写此方法,查询从持久层加载列表的具体实现。
        /// </summary>
        /// <param name="args">The arguments.</param>
        /// <param name="entityList">The entity list.</param>
        protected virtual void QueryListCore(SqlQueryArgs args, EntityList entityList)
        {
            var dataProvider = RdbDataProvider.Get(Repo);
            using (var dba = dataProvider.CreateDbAccesser())
            {
                //访问数据库
                if (args.Filter != null)
                {
                    #region 内存过滤式加载

                    if (!PagingInfo.IsNullOrEmpty(args.PagingInfo)) { throw new NotSupportedException("使用内存过滤器的同时,不支持提供分页参数。"); }

                    args.EntityType = Repo.EntityType;
                    args.MemoryList = new List<Entity>();
                    dataProvider.DbTable.QueryList(dba, args);
                    this.LoadByFilter(args);

                    #endregion
                }
                else
                {
                    if (args.FetchType == FetchType.Count)
                    {
                        #region 查询 Count

                        var value = dba.QueryValue(args.FormattedSql, args.Parameters);
                        var count = RdbTable.ConvertCount(value);
                        entityList.SetTotalCount(count);

                        #endregion
                    }
                    else
                    {
                        //是否需要为 PagingInfo 设置统计值。
                        var pagingInfoCount = !PagingInfo.IsNullOrEmpty(args.PagingInfo) && args.PagingInfo.IsNeedCount;

                        //如果 pagingInfoCount 为真,则在访问数据库时,会设置好 PagingInfo 的总行数。
                        args.EntityType = Repo.EntityType;
                        dataProvider.DbTable.QueryList(dba, args);

                        //最后,还需要设置列表的 TotalCount。
                        if (pagingInfoCount) { entityList.SetTotalCount(args.PagingInfo.TotalCount); }
                    }
                }
            }
        }
Beispiel #9
0
 /// <summary>
 /// 使用 sql 语句来查询实体。
 /// </summary>
 /// <param name="args">The arguments.</param>
 /// <returns></returns>
 /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception>
 protected EntityList QueryList(SqlQueryArgs args)
 {
     return(this.DataQueryer.QueryList(args));
 }
Beispiel #10
0
 /// <summary>
 /// 使用 sql 语句来查询实体。
 /// </summary>
 /// <param name="args">The arguments.</param>
 /// <returns></returns>
 /// <exception cref="System.NotSupportedException">使用内存过滤器的同时,不支持提供分页参数。</exception>
 protected EntityList QueryList(SqlQueryArgs args)
 {
     return this.DataQueryer.QueryList(args);
 }