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