Esempio n. 1
0
        /// <summary>
        /// 子类重写此方法,来实现自己的 GetByParentId 方法的数据层代码。
        /// </summary>
        /// <param name="parentId"></param>
        /// <param name="paging">分页信息。</param>
        /// <param name="eagerLoad">需要贪婪加载的属性。</param>
        /// <returns></returns>
        public virtual EntityList GetByParentId(object parentId, PagingInfo paging, EagerLoadOptions eagerLoad)
        {
            var parentProperty = _repository.FindParentPropertyInfo(true);
            var mp             = (parentProperty.ManagedProperty as IRefEntityProperty).RefIdProperty;

            var table = qf.Table(_repository);
            var q     = qf.Query(
                table,
                where : qf.Constraint(table.Column(mp), parentId)
                );

            var list = this.QueryList(q, paging, eagerLoad, true);

            return(list);
        }
Esempio n. 2
0
        private void BuildDefaultQuerying(EntityQueryArgs args)
        {
            var query = args.Query;

            //树型实体不支持修改排序规则!此逻辑不能放到 OnQueryBuilt 虚方法中,以免被重写。
            if (Repo.SupportTree)
            {
                //if (query.OrderBy.Count > 0)
                //{
                //    throw new InvalidOperationException(string.Format("树状实体 {0} 只不支持自定义排序,必须使用索引排序。", Repo.EntityType));
                //}
                var c = query.OrderBy.Count;
                if (c > 0)
                {
                    bool error = true;
                    //如果只有一个排序时,允许使用聚合父属性进行排序。
                    if (c == 1)
                    {
                        var parentProperty = _repository.FindParentPropertyInfo(false);
                        if (parentProperty != null)
                        {
                            var property  = query.OrderBy[0].Column.Property;
                            var pProperty = (parentProperty.ManagedProperty as IRefProperty).RefIdProperty;
                            error = property != pProperty;
                        }
                    }
                    if (error)
                    {
                        throw new InvalidOperationException(string.Format("树状实体 {0} 只不支持自定义排序,必须使用索引排序。", Repo.EntityType));
                    }
                }

                /*********************** 代码块解释 *********************************
                 * 以下,默认使用 TreeIndex 进行排序。
                 * 同时,在使用 TreeIndex 排序的基础上,还需要使用 Id 进行排序。
                 * TreeIndexHelper.ResetTreeIndex 在整理数据时,会把 TreeIndex 清空,此时数据可能无序。
                 * 而 Oracle 中查询时,返回的结果中 Id 可能是乱的,这会影响数据的加载。
                 **********************************************************************/
                var f     = QueryFactory.Instance;
                var table = query.From.FindTable(Repo);
                query.OrderBy.Add(
                    f.OrderBy(table.Column(Entity.TreeIndexProperty))
                    );
                query.OrderBy.Add(
                    f.OrderBy(table.IdColumn)
                    );
            }
        }
Esempio n. 3
0
        private void BuildDefaultQuerying(EntityQueryArgs args)
        {
            var query = args.Query;

            //树型实体不支持修改排序规则!此逻辑不能放到 OnQueryBuilt 虚方法中,以免被重写。
            if (Repo.SupportTree)
            {
                //if (query.OrderBy.Count > 0)
                //{
                //    throw new InvalidOperationException(string.Format("树状实体 {0} 只不支持自定义排序,必须使用索引排序。", Repo.EntityType));
                //}
                var c = query.OrderBy.Count;
                if (c > 0)
                {
                    bool error = true;
                    //如果只有一个排序时,允许使用聚合父属性进行排序。
                    if (c == 1)
                    {
                        var parentProperty = _repository.FindParentPropertyInfo(false);
                        if (parentProperty != null)
                        {
                            var property  = query.OrderBy[0].Column.Property;
                            var pProperty = (parentProperty.ManagedProperty as IRefProperty).RefIdProperty;
                            error = property != pProperty;
                        }
                    }
                    if (error)
                    {
                        throw new InvalidOperationException(string.Format("树状实体 {0} 只不支持自定义排序,必须使用索引排序。", Repo.EntityType));
                    }
                }

                query.OrderBy.Add(
                    QueryFactory.Instance.OrderBy(query.From.FindTable(Repo).Column(Entity.TreeIndexProperty))
                    );
            }
        }