protected void PrepareArgs(EntityQueryArgsBase args) { if (args.EntityList == null) { //必须使用 NewListFast,否则使用 NewList 会导致调用了 NotifyLoaded, //这样,不但不符合设计(这个列表需要在客户端才调用 NotifyLoaded),还会引发树型实体列表的多次关系重建。 args.EntityList = Repo.NewListFast(); } args.SetFetchType(CurrentIEQC.FetchType); }
///// <summary> ///// 所有使用 IQuery 的数据查询,在调用完应 queryBuilder 之后,都会执行此此方法。 ///// 所以子类可以重写此方法实现统一的查询条件逻辑。 ///// (例如,对于映射同一张表的几个子类的查询,可以使用此方法统一对所有方法都过滤)。 ///// ///// 默认实现为: ///// * 如果还没有进行排序,则进行默认的排序。 ///// * 如果单一参数实现了 IPagingCriteria 接口,则使用其中的分页信息进行分页。 ///// </summary> ///// <param name="args"></param> //protected virtual void OnPropertyQuerying(PropertyQueryArgs args) //{ // //如果没有指定 OrderNo 字段,则按照Id 排序。 // if (args.FetchType != FetchType.Count && !args.PropertyQuery.HasOrdered) // { // args.PropertyQuery.OrderBy(Entity.IdProperty, OrderDirection.Ascending); // } // //默认对分页进行处理。 // if (args.Filter == null) // { // var pList = CurrentIEQC.Parameters; // if (pList.Length == 1) // { // var userCriteria = pList[0] as IPagingCriteria; // if (userCriteria != null) { args.PropertyQuery.Paging(userCriteria.PagingInfo); } // } // } //} #endregion private void PrepareArgs(EntityQueryArgsBase args) { if (args.EntityList == null) { //必须使用 NewListFast,否则使用 NewList 会导致调用了 NotifyLoaded, //这样,不但不符合设计(这个列表需要在客户端才调用 NotifyLoaded),还会引发树型实体列表的多次关系重建。 args.EntityList = (Repo as EntityRepository).NewListFast(); } args.SetQueryType(CurrentIEQC.QueryType); }
internal void LoadByFilter(EntityQueryArgsBase args) { var entityList = args.EntityList; var filter = args.Filter; //如果存储过滤器,则说明 list 是一个内存中的临时对象。这时需要重新把数据加载进 List 中来。 if (args.QueryType == RepositoryQueryType.Count) { entityList.SetTotalCount(args.MemoryList.Count(e => filter(e))); } else { foreach (var item in args.MemoryList) { if (filter(item)) { entityList.Add(item); } } } }
/// <summary> /// 在数据加载完成后,完成其它的贪婪加载。 /// </summary> /// <param name="args"></param> /// <param name="entityList"></param> /// <param name="oldCount"></param> protected void EagerLoadOnCompleted(EntityQueryArgsBase args, EntityList entityList, int oldCount) { if (entityList.Count > 0) { if (args.FetchType == FetchType.First || args.FetchType == FetchType.List) { var elOptions = args.EagerLoadOptions; if (elOptions != null) { //先加载树子节点。 if (elOptions.LoadTreeChildren) { /*********************** 代码块解释 ********************************* * 加载树时,EntityList.LoadAllNodes 方法只加载根节点的子节点。 * 如果使用了 GetAll 方法,那么默认是已经加载了子节点的,不需要再调用 EntityList.LoadAllNodes。 * 所以下面只能对于每一个节点, **********************************************************************/ var tree = entityList as ITreeComponent; if (!tree.IsFullLoaded) { for (int i = 0, c = entityList.Count; i < c; i++) { var item = entityList[i] as ITreeComponent; item.LoadAllNodes(); } } } //再加载实体的属性。 this.EagerLoad(entityList, elOptions.CoreList); } //如果 entityList 列表中已经有数据,那么只能对新添加的实体进行 OnDbLoaded操作通知加载完成。 this.OnDbLoaded(entityList, oldCount); } } _dataProvider.OnEntityQueryed(args); }
/// <summary> /// QueryList 方法完成后调用。 /// /// 子类可重写此方法来实现查询完成后的数据修整工具。 /// </summary> /// <param name="args"></param> internal protected virtual void OnEntityQueryed(EntityQueryArgsBase args) { }
/// <summary> /// QueryList 方法完成后调用。 /// /// 子类可重写此方法来实现查询完成后的数据修整工具。 /// </summary> /// <param name="args"></param> internal protected virtual void OnEntityQueryed(EntityQueryArgsBase args) { _dataQueryer.OnEntityQueryed(args); }
private void PrepareArgs(EntityQueryArgsBase args) { if (args.EntityList == null) { //必须使用 NewListFast,否则使用 NewList 会导致调用了 NotifyLoaded, //这样,不但不符合设计(这个列表需要在客户端才调用 NotifyLoaded),还会引发树型实体列表的多次关系重建。 args.EntityList = (Repo as EntityRepository).NewListFast(); } args.SetFetchType(CurrentIEQC.FetchType); }
/// <summary> /// QueryList 方法完成后调用。 /// /// 子类可重写此方法来实现查询完成后的数据修整工具。 /// </summary> /// <param name="args"></param> protected internal virtual void OnEntityQueryed(EntityQueryArgsBase args) { _dataQueryer.OnEntityQueryed(args); }