/// <summary> /// Processo o resultado da consulta. /// </summary> /// <param name="prepareResult"></param> /// <param name="queryableResult"></param> private static void ProcessQueryResult(PrepareNestedQueriesResult prepareResult, Query.IQueryResult queryableResult) { var bindStrategy = prepareResult.EntityLoader.GetBindStrategy(); var objectCreator = prepareResult.EntityLoader.GetObjectCreator(); var recordKeyFactory = prepareResult.EntityLoader.GetRecordKeyFactory(); var dataModelTypeName = Colosoft.Reflection.TypeName.Get(prepareResult.EntityLoader.DataModelType); Colosoft.Query.IQueryResultBindStrategySession bindStrategySession = null; foreach (var record in queryableResult) { var data = objectCreator.Create(); if (bindStrategySession == null) { bindStrategySession = bindStrategy.CreateSession(record.Descriptor); } var bindResult = bindStrategySession.Bind(record, Query.BindStrategyMode.All, ref data); if (!bindResult.Any()) { throw new Exception(string.Format("Not found scheme for bind record data to type '{0}'", data.GetType().FullName)); } var recordKey = recordKeyFactory.Create(dataModelTypeName, record); EntityLoaderCreatorArgs creatorArgs = null; creatorArgs = new EntityLoaderCreatorArgs((Model)data, recordKey, new EntityLoaderChildContainer(), new EntityLoaderLinksContainer(), new EntityLoaderReferenceContainer(), prepareResult.UiContext, prepareResult.EntityTypeManager); prepareResult.ParentResult.Add(creatorArgs); } }
/// <summary> /// Realiza a carga completa das entidades contidas nos registros informados. /// </summary> /// <param name="result">Registros com os dados da entidades que serão carregadas.</param> /// <param name="sourceContext">Contexto de origem dos dados.</param> /// <param name="uiContext">Converto visual.</param> /// <param name="entityTypeManager">Instancia do gerenciador de tipos de entidades.</param> /// <returns></returns> public virtual IEnumerable <IEntity> GetFullEntities(IEnumerable <Colosoft.Query.IRecord> result, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager) { result.Require("result").NotNull(); var objectCreator = GetObjectCreator(); var recordKeyFactory = GetRecordKeyFactory(); var dataModelTypeName = Colosoft.Reflection.TypeName.Get(DataModelType); Colosoft.Query.IQueryResultBindStrategySession bindStrategySession = null; foreach (var i in result) { if (bindStrategySession == null) { bindStrategySession = GetBindStrategy().CreateSession(i.Descriptor); } var recordKey = recordKeyFactory.Create(dataModelTypeName, i); yield return(FullLoad(i, recordKey, bindStrategySession, objectCreator, sourceContext, uiContext, entityTypeManager)); } }
/// <summary> /// Realiza a carga completa da entidade. /// </summary> /// <param name="record">Registro dos dados da entidade.</param> /// <param name="recordKey">Chave do registro.</param> /// <param name="bindStrategy">Estratégia de vinculação dos dados do resultado.</param> /// <param name="objectCreator">Instancia responsável por criar objetos.</param> /// <param name="sourceContext">Contexto de origem dos dados.</param> /// <param name="uiContext">Contexto visual.</param> /// <param name="entityTypeManager">Gerenciador de tipos.</param> /// <returns></returns> public abstract IEntity FullLoad(Colosoft.Query.IRecord record, Query.RecordKey recordKey, Colosoft.Query.IQueryResultBindStrategySession bindStrategy, Colosoft.Query.IQueryResultObjectCreator objectCreator, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager);