/// <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); }
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) ); } }
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)) ); } }