コード例 #1
0
            /// <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);
                }
            }
コード例 #2
0
        /// <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));
            }
        }
コード例 #3
0
 /// <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);