Exemple #1
0
 /// <summary>
 /// Cria uma instancia com os dados da entrada.
 /// </summary>
 /// <param name="typeName">Nome do tipo da entrada.</param>
 /// <param name="version"></param>
 /// <param name="queryResult">Resultado dos itens da entrada.</param>
 public DataEntry(Colosoft.Reflection.TypeName typeName, DateTime version, Query.IQueryResult queryResult)
 {
     typeName.Require("typeName").NotNull();
     _typeName = typeName;
     _version  = version;
     _result   = queryResult;
 }
        public IEnumerable <TEntity> ProcessResult <TEntity>(Query.IQueryResult queryResult, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity
        {
            queryResult.Require("queryResult").NotNull();
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(new EntitiesEnumerable <TEntity>(loader.GetFullEntities(queryResult, sourceContext, uiContext, _entityTypeManager)));
        }
 /// <summary>
 /// Libera a instancia.
 /// </summary>
 /// <param name="disposing"></param>
 protected override void Dispose(bool disposing)
 {
     if (_queryResult != null)
     {
         _queryResult.Dispose();
     }
     _queryResult = null;
     base.Dispose(disposing);
 }
Exemple #4
0
 /// <summary>
 /// Move para o próximo nome de tipo que será processado.
 /// </summary>
 /// <returns></returns>
 private bool MoveNextTypeMetadata()
 {
     while (_typeMetadatasEnumerator != null && _typeMetadatasEnumerator.MoveNext())
     {
         var typeMetadata = _typeMetadatasEnumerator.Current;
         _loader.Observer.OnStageChanged(new CacheLoaderStage("LoadingType", ResourceMessageFormatter.Create(() => Properties.Resources.CacheLoader_LoadingTypeName, typeMetadata.FullName)));
         _loader.Observer.OnCurrentProgressChanged(new System.ComponentModel.ProgressChangedEventArgs((_position++ *100 / _typeMetadatasCount), null));
         if (_loader.Observer is IDataCacheLoaderObserver)
         {
             ((IDataCacheLoaderObserver)_loader.Observer).OnBeginLoadTypeMetadata(typeMetadata);
         }
         var typeName = new Colosoft.Reflection.TypeName(!string.IsNullOrEmpty(typeMetadata.Assembly) ? string.Format("{0}, {1}", typeMetadata.FullName, typeMetadata.Assembly) : typeMetadata.FullName);
         Query.IQueryResult result = null;
         try
         {
             var columns = new List <Query.ProjectionEntry>(typeMetadata.Select(f => new Query.ProjectionEntry(f.Name, null)));
             if (typeMetadata.IsVersioned && !columns.Exists(f => {
                 var column = f.GetColumnInfo();
                 return(column != null && StringComparer.InvariantCultureIgnoreCase.Equals(column.Name, "RowVersion"));
             }))
             {
                 columns.Add(new ProjectionEntry("RowVersion", null));
             }
             result            = _loader.SourceContext.CreateQuery().From(new Query.EntityInfo(typeMetadata.FullName)).Select(new Query.Projection(columns)).NoUseCache().Execute();
             _recordEnumerator = result.GetEnumerator();
         }
         catch (Exception ex)
         {
             var args = new CacheLoaderErrorEventArgs(ResourceMessageFormatter.Create(() => Properties.Resources.DataCacheLoader_CreateQueryError, typeMetadata.FullName), ex);
             _loader.OnLoadError(typeName, args);
             if (_loader.Observer is IDataCacheLoaderObserver)
             {
                 ((IDataCacheLoaderObserver)_loader.Observer).OnEndLoadTypeMetadata(typeMetadata, ex);
             }
             continue;
         }
         _currentTypeName  = typeName;
         _currentGenerator = _loader.RecordKeyFactory.CreateGenerator(_currentTypeName);
         return(true);
     }
     _currentTypeName  = null;
     _currentGenerator = null;
     if (_recordEnumerator != null)
     {
         try
         {
             _recordEnumerator.Dispose();
         }
         catch
         {
         }
     }
     _recordEnumerator = null;
     return(false);
 }
Exemple #5
0
 /// <summary>
 /// Deserializa os dados da instancia.
 /// </summary>
 /// <param name="reader"></param>
 void Colosoft.Serialization.ICompactSerializable.Deserialize(Serialization.IO.CompactReader reader)
 {
     if (reader.ReadByte() == 1)
     {
         _typeName = new Reflection.TypeName();
         _typeName.Deserialize(reader);
     }
     else
     {
         _typeName = null;
     }
     _version = reader.ReadDateTime();
     if (reader.ReadByte() == 1)
     {
         _result = new Query.QueryResult();
         ((Colosoft.Serialization.ICompactSerializable)_result).Deserialize(reader);
     }
     else
     {
         _result = new Query.QueryResult();
     }
 }
Exemple #6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="info"></param>
 /// <param name="context"></param>
 protected DataEntry(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
 {
     _typeName = info.GetValue("typeName", typeof(Colosoft.Reflection.TypeName)) as Colosoft.Reflection.TypeName;
     _version  = info.GetDateTime("version");
     _result   = info.GetValue("result", typeof(Query.QueryResult)) as Query.QueryResult;
 }
        public IEnumerable <TEntity> ProcessResult <TEntity>(Colosoft.Business.PrepareNestedQueriesResult prepareResult, Colosoft.Query.ISourceContext sourceContext, Query.IQueryResult queryResult) where TEntity : class, IEntity
        {
            prepareResult.Require("prepareResult").NotNull();
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(new EntitiesEnumerable <TEntity>(loader.GetFullEntities(prepareResult, sourceContext, queryResult)));
        }
 /// <summary>
 /// Construtor usado para carregar as entidades com base no resulta da consulta.
 /// </summary>
 /// <param name="prepareResult"></param>
 /// <param name="sourceContext"></param>
 /// <param name="queryResult"></param>
 public GetFullEntitiesEnumerable(PrepareNestedQueriesResult prepareResult, Colosoft.Query.ISourceContext sourceContext, Query.IQueryResult queryResult) : this(prepareResult, sourceContext)
 {
     _queryResult = queryResult;
 }
            /// <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);
                }
            }
Exemple #10
0
 /// <summary>
 /// Recupera as entidades completas com bas na preparação da consulta.
 /// </summary>
 /// <param name="prepareResult">Resultado da preparação da consulta.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="queryResult">Resultado da consulta.</param>
 /// <returns></returns>
 public abstract IEnumerable <IEntity> GetFullEntities(PrepareNestedQueriesResult prepareResult, Colosoft.Query.ISourceContext sourceContext, Query.IQueryResult queryResult);