Ejemplo n.º 1
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="entityLoader">Loader.</param>
 /// <param name="queryable">Consulta que será realizado.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 public GetEntityDescriptorsEnumerable(IEntityLoader entityLoader, Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, string uiContext)
 {
     _entityLoader  = entityLoader;
     _queryable     = queryable;
     _sourceContext = sourceContext;
     _uiContext     = uiContext;
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="sourceContext"></param>
 /// <param name="childDataModel"></param>
 /// <param name="isLazy"></param>
 /// <param name="uiContext"></param>
 public LinkCreatorArgs(Colosoft.Query.ISourceContext sourceContext, Colosoft.Data.IModel childDataModel, bool isLazy, string uiContext)
 {
     this.SourceContext  = sourceContext;
     this.ChildDataModel = childDataModel;
     this.IsLazy         = isLazy;
     this.UIContext      = uiContext;
 }
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="linkEntity"></param>
 /// <param name="entityCreator"></param>
 /// <param name="uiContext"></param>
 /// <param name="entityTypeManager"></param>
 /// <param name="sourceContext"></param>
 public EntityFromLinkCreatorArgs(IEntity linkEntity, EntityFromModelCreatorHandler entityCreator, string uiContext, IEntityTypeManager entityTypeManager, Colosoft.Query.ISourceContext sourceContext)
 {
     this.LinkEntity        = linkEntity;
     this.EntityCreator     = entityCreator;
     this.UIContext         = uiContext;
     this.EntityTypeManager = entityTypeManager;
     this.SourceContext     = sourceContext;
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="entityLoader">Loader.</param>
 /// <param name="queryable">Consulta que será realizado.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 /// <param name="entityTypeManager">Gerenciador dos tipos de entidas.</param>
 /// <returns></returns>
 public GetEntitiesEnumerable(EntityLoader <TEntity1, Model> entityLoader, Query.Queryable queryable, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager)
 {
     _entityLoader      = entityLoader;
     _queryable         = queryable;
     _sourceContext     = sourceContext;
     _uiContext         = uiContext;
     _entityTypeManager = entityTypeManager;
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Libera a instancia.
 /// </summary>
 /// <param name="disposing"></param>
 protected virtual void Dispose(bool disposing)
 {
     if (_entityLoader != null && Colosoft.Query.RecordObserverManager.Instance.IsEnabled)
     {
         Colosoft.Query.RecordObserverManager.Instance.Unregister(_entityLoader.DataModelTypeName, this);
     }
     _entityLoader  = null;
     _sourceContext = null;
     _isDisposed    = false;
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Recupera a instancia do descritor da entidade pelo uid informador.
        /// </summary>
        /// <param name="uid">Identificador unico da instancia.</param>
        /// <param name="sourceContext">Contexto de origem.</param>
        /// <param name="uiContext">Contexto visual.</param>
        /// <returns></returns>
        public IEntityDescriptor GetDescriptorByUid <TEntity>(int uid, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity
        {
            sourceContext.Require("sourceContext").NotNull();
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            if (!loader.HasUid)
            {
                throw new InvalidOperationException("Entity has not uid.");
            }
            var query = sourceContext.CreateQuery().From(new Query.EntityInfo(loader.DataModelType.FullName)).Where(string.Format("{0} = ?entityuid", loader.UidPropertyName)).Add("?entityuid", uid);

            return(ProcessResultDescriptor <TEntity>(query, sourceContext, uiContext).FirstOrDefault());
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="entityLoader"></param>
 /// <param name="sourceContext"></param>
 /// <param name="collection"></param>
 public EntityDescriptorQueryResultChangedObserver(IEntityLoader entityLoader, Query.ISourceContext sourceContext, System.Collections.IList collection)
 {
     entityLoader.Require("entityLoader").NotNull();
     collection.Require("collection").NotNull();
     _uid = Query.QueryResultChangedObserverUidGenerator.CreateUid();
     _collectionReference = new WeakReference(collection);
     _entityLoader        = entityLoader;
     _sourceContext       = sourceContext;
     if (Colosoft.Query.RecordObserverManager.Instance.IsEnabled)
     {
         Colosoft.Query.RecordObserverManager.Instance.Register(_entityLoader.DataModelTypeName, this);
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="sourceContext">Contexto de origem que será usado para fazer as consulta no banco de dados.</param>
 /// <param name="typeSchema"></param>
 /// <param name="dataEntryDownloader">Instancia do downloader da entradas de dados.</param>
 /// <param name="dataEntriesRepository">Instancia do repositório das entradas de dados.</param>
 /// <param name="cacheLoaderObverser">Observer o loader.</param>
 /// <param name="logger"></param>
 public DataCacheManager(Colosoft.Query.ISourceContext sourceContext, ITypeSchema typeSchema, IDataEntryDownloader dataEntryDownloader, IDataEntriesRepository dataEntriesRepository, ICacheLoaderObserver cacheLoaderObverser, Colosoft.Logging.ILogger logger)
 {
     sourceContext.Require("sourceContext").NotNull();
     typeSchema.Require("typeSchema").NotNull();
     dataEntryDownloader.Require("dataEntryDownloader").NotNull();
     dataEntriesRepository.Require("dataEntriesRepository").NotNull();
     cacheLoaderObverser.Require("cacheLoaderObserver").NotNull();
     logger.Require("logger").NotNull();
     _sourceContext         = sourceContext;
     _typeSchema            = typeSchema;
     _dataEntryDownloader   = dataEntryDownloader;
     _dataEntriesRepository = dataEntriesRepository;
     _cacheLoaderObserver   = cacheLoaderObverser;
     _logger = logger;
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Cria uma entidade do tipo TEntity e a conecta ao contexto da origem dos dados.
 /// </summary>
 /// <typeparam name="TEntity"></typeparam>
 /// <param name="sourceContext"></param>
 /// <returns></returns>
 public static TEntity Create <TEntity>(this Colosoft.Query.ISourceContext sourceContext) where TEntity : Colosoft.Business.IEntity, new()
 {
     try
     {
         var entity = new TEntity();
         if (entity is Colosoft.Business.IConnectedEntity)
         {
             ((Colosoft.Business.IConnectedEntity)entity).Connect(sourceContext);
         }
         return(entity);
     }
     catch (System.Reflection.TargetInvocationException ex)
     {
         throw ex.InnerException;
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Realiza a carga da entidade com carga tardia dos dados filhos.
        /// </summary>
        /// <param name="query">Instancia da consulta para recuperar a entidade.</param>
        /// <param name="sourceContext">Contexto de origem dos dados.</param>
        /// <param name="uiContext">Contexto visual.</param>
        /// <param name="args">Argumentos que serão usados</param>
        /// <param name="entityTypeManager">Instancia do gerenciador de tipos de entidades.</param>
        /// <returns></returns>
        public virtual IEntity LazyLoad(Colosoft.Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager, EntityLoaderLazyArgs args = null)
        {
            var result     = query.Take(1).Execute();
            var enumerator = result.GetEnumerator();

            if (enumerator.MoveNext())
            {
                var record        = enumerator.Current;
                var bindStrategy  = GetBindStrategy();
                var objectCreator = GetObjectCreator();
                var recordKey     = GetRecordKeyFactory().Create(Colosoft.Reflection.TypeName.Get(DataModelType), record);
                return(LazyLoad(record, recordKey, bindStrategy, objectCreator, sourceContext, uiContext, entityTypeManager));
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Realiza a carga completa da entidade.
        /// </summary>
        /// <param name="query">Instancia da consulta para recuperar a entidade.</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 virtual IEntity FullLoad(Colosoft.Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext, IEntityTypeManager entityTypeManager)
        {
            var result     = query.Take(1).Execute();
            var enumerator = result.GetEnumerator();

            if (enumerator.MoveNext())
            {
                var record = enumerator.Current;
                var bindStrategySession = GetBindStrategy().CreateSession(record.Descriptor);
                var objectCreator       = GetObjectCreator();
                var recordKeyFactory    = GetRecordKeyFactory();
                var dataModelTypeName   = Colosoft.Reflection.TypeName.Get(DataModelType);
                var recordKey           = recordKeyFactory.Create(dataModelTypeName, record);
                return(FullLoad(record, recordKey, bindStrategySession, objectCreator, sourceContext, uiContext, entityTypeManager));
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Prepara a consulta para recupera todos os dados das entidades que serão recuperadas.
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="query">Consulta sobre a qual será aplicada as sub-consultas.</param>
        /// <param name="sourceContext">Contexto de origem.</param>
        /// <param name="uiContext">Contexto de interface com o usuário.</param>
        /// <returns>Resultado da preparação da consulta.</returns>
        public PrepareNestedQueriesResult Prepare <TEntity>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity
        {
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(loader.PrepareNestedQueries(query, uiContext, _entityTypeManager));
        }
        /// <summary>
        /// Cria a consulta para recuperar os itens filhos.
        /// </summary>
        /// <param name="parentUid">Identificador da entidade pai.</param>
        /// <param name="parentDataModel">Instancia com os dados do pai.</param>
        /// <param name="sourceContext">Contexto de origem.</param>
        /// <returns></returns>
        public EntityInfoQuery[] CreateQueries(int parentUid, Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext)
        {
            var result    = new EntityInfoQuery[_dynamicChild.Entries.Count];
            var startDate = ServerData.GetDateTimeOffSet();

            if (parentDataModel is Colosoft.Data.ITraceableModel)
            {
                startDate = ((Colosoft.Data.ITraceableModel)parentDataModel).CreatedDate;
            }
            for (var i = 0; i < result.Length; i++)
            {
                var entry = _dynamicChild.Entries[i];
                result[i] = entry.CreateQuery(parentUid, _parentLoader, parentDataModel, sourceContext);
            }
            return(result);
        }
Ejemplo n.º 14
0
 /// <summary>
 /// Cria um nova instancia da lista.
 /// Esse método é usado por reflexão.
 /// </summary>
 /// <param name="items"></param>
 /// <param name="child">Instancia do filho associado com o link.</param>
 /// <param name="linkInfo"></param>
 /// <param name="childFromModelCreator"></param>
 /// <param name="uiContext"></param>
 /// <param name="parentUidSetter"></param>
 /// <param name="sourceContext"></param>
 /// <param name="entityTypeManager"></param>
 /// <returns></returns>
 internal static EntityLinksList <TEntity> CreateLazyInstance(Lazy <IEnumerable <IEntity> > items, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, IEntityList child, string uiContext, Action <IEntity> parentUidSetter, Colosoft.Query.ISourceContext sourceContext, IEntityTypeManager entityTypeManager)
 {
     return(new EntityLinksList <TEntity>(new Lazy <IEnumerable <TEntity> >(() => new Collections.NotifyCollectionChangedObserverRegisterEnumerable <TEntity>(items.Value)), linkInfo, childFromModelCreator, child, uiContext, new Action <TEntity>(e => parentUidSetter(e)), sourceContext, entityTypeManager)
     {
         _isLazy = true
     });
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Cria uma instancia já definindos os itens iniciais.
 /// </summary>
 /// <param name="items">Itens que serão usados na inicialização.</param>
 /// <param name="linkInfo">Informações do link.</param>
 /// <param name="childFromModelCreator"></param>
 /// <param name="child">Instancia do filho associado com o link.</param>
 /// <param name="uiContext"></param>
 /// <param name="parentUidSetter"></param>
 /// <param name="sourceContext">Contexto de origem de consultas.</param>
 /// <param name="entityTypeManager"></param>
 public EntityLinksList(IEnumerable <TEntity> items, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, IEntityList child, string uiContext, Action <TEntity> parentUidSetter, Colosoft.Query.ISourceContext sourceContext = null, IEntityTypeManager entityTypeManager = null) : base(items, uiContext, parentUidSetter, entityTypeManager)
 {
     Initialize(child, linkInfo, childFromModelCreator, sourceContext);
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Processa os descritores para o resultado.
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <typeparam name="TEntityDescritor"></typeparam>
        /// <param name="query"></param>
        /// <param name="sourceContext"></param>
        /// <param name="uiContext"></param>
        /// <returns></returns>
        public IEnumerable <TEntityDescritor> ProcessResultDescriptor <TEntity, TEntityDescritor>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity where TEntityDescritor : IEntityDescriptor
        {
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(loader.GetEntityDescriptors <TEntityDescritor>(query, sourceContext, uiContext));
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Inicializa a instancia.
 /// </summary>
 /// <param name="child">Instancia do filho associado.</param>
 /// <param name="linkInfo">Informações do link.</param>
 /// <param name="childFromModelCreator"></param>
 /// <param name="sourceContext">Contexto de origem de consultas.</param>
 private void Initialize(IEntityList child, EntityLoaderLinkInfo linkInfo, EntityFromModelCreatorHandler childFromModelCreator, Colosoft.Query.ISourceContext sourceContext)
 {
     child.Require("child").NotNull();
     linkInfo.Require("linkInfo").NotNull();
     _child    = child;
     _linkInfo = linkInfo;
     _childFromModelCreator = childFromModelCreator;
     ((IConnectedEntity)this).Connect(sourceContext);
     if (_hasUid == null)
     {
         _hasUid = TypeManager.HasUid(typeof(TEntity));
     }
     if (child is Collections.INotifyCollectionChangedDispatcher)
     {
         ((Collections.INotifyCollectionChangedDispatcher)child).AddCollectionChanged(ChildCollectionChanged, Collections.NotifyCollectionChangedDispatcherPriority.High);
     }
     else
     {
         child.CollectionChanged += ChildCollectionChanged;
     }
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Processa o resultado da consulta a carrega as entidades de negócio.
 /// </summary>
 /// <typeparam name="TEntity">Tipo da entidade de negócio.</typeparam>
 /// <param name="queryResultContainer">Container d resultado da consulta.</param>
 /// <param name="sourceContext">Contexto de origem.</param>
 /// <param name="uiContext"></param>
 /// <returns></returns>
 public static IEnumerable <TEntity> ProcessLazyResult <TEntity>(this Colosoft.Query.IQueryResultContainer queryResultContainer, Colosoft.Query.ISourceContext sourceContext = null, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity
 {
     queryResultContainer.Require("queryResultContainer").NotNull();
     return(ProcessLazyResult <TEntity>(queryResultContainer.GetResult(), sourceContext, uiContext));
 }
Ejemplo n.º 19
0
 /// <summary>
 /// Recupera o descritor da instancia pelo identificador informado.
 /// </summary>
 /// <typeparam name="TEntity">Tipo da entidade</typeparam>
 /// <param name="sourceContext">Contexto de origem.</param>
 /// <param name="uid">Identificador unico da instancia.</param>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 /// <returns></returns>
 public static IEntityDescriptor GetDescriptor <TEntity>(this Colosoft.Query.ISourceContext sourceContext, int uid, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity
 {
     return(Colosoft.Business.EntityManager.Instance.GetDescriptorByUid <TEntity>(uid, sourceContext, uiContext));
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Processa os descritores para o resultado.
 /// </summary>
 /// <typeparam name="TEntity"></typeparam>
 /// <param name="query"></param>
 /// <param name="sourceContext"></param>
 /// <param name="uiContext"></param>
 /// <returns></returns>
 public IEnumerable <IEntityDescriptor> ProcessResultDescriptor <TEntity>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null) where TEntity : class, IEntity
 {
     return(ProcessResultDescriptor <TEntity, IEntityDescriptor>(query, sourceContext, uiContext));
 }
Ejemplo n.º 21
0
 /// <summary>
 /// Processa o resultado da consulta a carrega as entidades de negócio.
 /// </summary>
 /// <typeparam name="TEntity">Tipo da entidade de negócio.</typeparam>
 /// <param name="queryResult">Resultado da consulta.</param>
 /// <param name="sourceContext">Contexto de origem.</param>
 /// <param name="uiContext"></param>
 /// <returns></returns>
 public static IEnumerable <TEntity> ProcessLazyResult <TEntity>(this Colosoft.Query.IQueryResult queryResult, Colosoft.Query.ISourceContext sourceContext = null, string uiContext = null) where TEntity : class, Colosoft.Business.IEntity
 {
     queryResult.Require("queryResult").NotNull();
     if (Colosoft.Business.EntityManager.Instance == null)
     {
         throw new InvalidOperationException("EntityManager instance is null");
     }
     return(Colosoft.Business.EntityManager.Instance.ProcessLazyResult <TEntity>(queryResult, sourceContext, uiContext));
 }
Ejemplo n.º 22
0
        public IEnumerable <TEntity> ProcessLazyResult <TEntity>(Query.Queryable query, Colosoft.Query.ISourceContext sourceContext, string uiContext = null, EntityLoaderLazyArgs args = null) where TEntity : class, IEntity
        {
            var loader = _entityTypeManager.GetLoader(typeof(TEntity));

            return(new EntitiesEnumerable <TEntity>(loader.GetLazyEntities(query.Execute(), sourceContext, uiContext, _entityTypeManager, args)));
        }
Ejemplo n.º 23
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="entityTypeManager"></param>
 /// <param name="sourceContext"></param>
 public EntityModelBinder(Colosoft.Business.IEntityTypeManager entityTypeManager, Colosoft.Query.ISourceContext sourceContext) : base(entityTypeManager)
 {
     _sourceContext = sourceContext;
 }
Ejemplo n.º 24
0
        /// <summary>
        /// Cria a consulta para recuperar os itens filhos.
        /// </summary>
        /// <param name="parentDataModel">Instancia com os dados do pai.</param>
        /// <param name="sourceContext">Contexto de origem.</param>
        /// <returns></returns>
        internal EntityInfoQuery[] CreateQueries(Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext)
        {
            var    query = sourceContext.CreateQuery().From(new Query.EntityInfo(DataModelType.FullName));
            string conditionalExpression = null;
            var    conditional           = GetConditional();

            if (conditional != null)
            {
                conditionalExpression = conditional.Expression;
                foreach (var i in conditional.Parameters)
                {
                    object value = i.Value;
                    if (value is Colosoft.Query.ReferenceParameter)
                    {
                        var referenceParameter = (Colosoft.Query.ReferenceParameter)i.Value;
                        var prop = parentDataModel.GetType().GetProperty(referenceParameter.ColumnName);
                        if (prop != null)
                        {
                            try
                            {
                                value = prop.GetValue(parentDataModel, null);
                            }
                            catch (System.Reflection.TargetInvocationException ex)
                            {
                                throw ex.InnerException;
                            }
                        }
                        else
                        {
                            throw new InvalidOperationException(ResourceMessageFormatter.Create(() => Properties.Resources.EntityLoaderReference_ParentPropertyNotFound, referenceParameter.ColumnName, parentDataModel.GetType().Name).Format());
                        }
                    }
                    query.Add(i.Name, value);
                }
            }
            return(new EntityInfoQuery[] {
                new EntityInfoQuery(DataModelType, EntityType, query.Where(conditionalExpression))
            });
        }
Ejemplo n.º 25
0
        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)));
        }
Ejemplo n.º 26
0
        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)));
        }
Ejemplo n.º 27
0
 /// <summary>
 /// Cria a consulta para recuperar os itens filhos.
 /// </summary>
 /// <param name="parentUid">Identificador da entidade pai.</param>
 /// <param name="parentUidProperty"></param>
 /// <param name="sourceContext">Contexto de origem.</param>
 /// <returns></returns>
 public Colosoft.Query.Queryable CreateQuery(int parentUid, string parentUidProperty, Colosoft.Query.ISourceContext sourceContext)
 {
     return(sourceContext.CreateQuery().From(new Query.EntityInfo(LinkDataModelType.FullName, "t1")).Join(ChildDataModelType.FullName, Query.JoinType.Inner, Query.ConditionalContainer.Parse(string.Format("t1.[{0}] == t2.[{1}]", ChildPropertyName, ForeignPropertyName)), "t2").Where(string.Format("t2.[{0}] == ?parentUid", parentUidProperty)).Add("?parentUid", parentUid));
 }
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="sourceContext"></param>
 /// <param name="entityTypeManager"></param>
 public EntityModelBinderProvider(Colosoft.Business.IEntityTypeManager entityTypeManager, Colosoft.Query.ISourceContext sourceContext)
 {
     _sourceContext     = sourceContext;
     _entityTypeManager = entityTypeManager;
 }
Ejemplo n.º 29
0
        /// <summary>
        /// Cria a consulta para recuperar os itens filhos.
        /// </summary>
        /// <param name="parentUid">Identificador da entidade pai.</param>
        /// <param name="parentLoader">Loader do pai.</param>
        /// <param name="parentDataModel">Instancia com os dados do pai.</param>
        /// <param name="sourceContext">Contexto de origem.</param>
        /// <returns></returns>
        internal EntityInfoQuery CreateQuery(int parentUid, IEntityLoader parentLoader, Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext)
        {
            var query = sourceContext.CreateQuery().From(new Query.EntityInfo(DataModelType.FullName));

            if (ExecutePredicate != null)
            {
                query.ExecutePredicate = (Colosoft.Query.QueryExecutePredicate)ExecutePredicate.Clone();
            }
            string conditionalExpression = null;

            if (parentLoader.HasUid)
            {
                query.Add("?parentUid", parentUid);
                conditionalExpression = string.Format("{0} == ?parentUid", _foreignPropertyName);
            }
            if (Conditional != null)
            {
                if (parentLoader.HasUid)
                {
                    conditionalExpression = string.Format("{0} && ({1})", conditionalExpression, this.Conditional.Expression);
                }
                else
                {
                    conditionalExpression = this.Conditional.Expression;
                }
                foreach (var i in this.Conditional.Parameters)
                {
                    if (i.Value is Query.ReferenceParameter)
                    {
                        var reference = (Query.ReferenceParameter)i.Value;
                        var property  = parentDataModel.GetType().GetProperty(reference.ColumnName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                        if (property == null)
                        {
                            throw new Exception(string.Format("Property {0} not found in type {1}", reference.ColumnName, parentDataModel.GetType().FullName));
                        }
                        try
                        {
                            var value = property.GetValue(parentDataModel, null);
                            query.Add(i.Name, value);
                        }
                        catch (System.Reflection.TargetInvocationException ex)
                        {
                            throw ex.InnerException;
                        }
                    }
                    else
                    {
                        query.Add(i.Name, i.Value);
                    }
                }
            }
            query.Where(conditionalExpression);
            return(new EntityInfoQuery(DataModelType, EntityType, query));
        }
Ejemplo n.º 30
0
        /// <summary>
        /// Cria a consulta para recuperar os itens filhos.
        /// </summary>
        /// <param name="parentUid">Identificador da entidade pai.</param>
        /// <param name="parentDataModel">Instancia com os dados do pai.</param>
        /// <param name="sourceContext">Contexto de origem.</param>
        /// <returns></returns>
        public EntityInfoQuery[] CreateQueries(int parentUid, Colosoft.Data.IModel parentDataModel, Colosoft.Query.ISourceContext sourceContext)
        {
            var    query = sourceContext.CreateQuery().From(new Query.EntityInfo(DataModelType.FullName));
            string conditionalExpression = null;

            if (_parentLoader.HasUid)
            {
                query.Add("?parentUid", parentUid);
                conditionalExpression = string.Format("{0} == ?parentUid", _foreignPropertyName);
            }
            if (Conditional != null)
            {
                var conditional = this.Conditional();
                if (conditional != null)
                {
                    if (!string.IsNullOrEmpty(conditionalExpression))
                    {
                        conditionalExpression = string.Format("{0} && ({1})", conditionalExpression, conditional.Expression);
                    }
                    else
                    {
                        conditionalExpression = conditional.Expression;
                    }
                    foreach (var i in conditional.Parameters)
                    {
                        query.Add(i.Name, i.Value);
                    }
                }
            }
            if (string.IsNullOrEmpty(conditionalExpression))
            {
                throw new InvalidOperationException(string.Format("Not support child '{0}', because not found conditional expression.", Name));
            }
            return(new EntityInfoQuery[] {
                new EntityInfoQuery(DataModelType, EntityType, query.Where(conditionalExpression))
            });
        }