Exemple #1
0
        /// <summary>
        /// Compara a instancia de dados do link com a instancia de dados do filho.
        /// </summary>
        /// <param name="link">Instancia dos dados do link.</param>
        /// <param name="child">Instancia dos dados do filho.</param>
        /// <returns></returns>
        public bool Equals(Colosoft.Data.IModel link, Colosoft.Data.IModel child)
        {
            var childId = this._childKeyGetter(link);
            var linkId  = this._linkParentForeignKeyGetter(child);

            return(childId == linkId);
        }
Exemple #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>
        /// 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);
        }
Exemple #4
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))
            });
        }
Exemple #5
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))
            });
        }
Exemple #6
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));
        }
Exemple #7
0
 /// <summary>
 /// Recupera o identificador do filho que está no modelo de dados do link.
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public int GetChildKeyNullable(Colosoft.Data.IModel model)
 {
     return(GetChildPropertyNullableCompiled()((TLinkDataModel)model).GetValueOrDefault());
 }
Exemple #8
0
 /// <summary>
 /// Recupera o identificador do filho que está no modelo de dados do link.
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public int GetChildKey(Colosoft.Data.IModel model)
 {
     return(GetChildPropertyCompiled()((TLinkDataModel)model));
 }
Exemple #9
0
 /// <summary>
 /// Recupera o método que recupera o identificador da chave estrangeira do modelo de dados informado.
 /// </summary>
 /// <returns></returns>
 public int GetLinkParentForeignKeyNullable(Colosoft.Data.IModel model)
 {
     return(GetForeignPropertyNullableCompiled()((TLinkParentDataModel)model).GetValueOrDefault());
 }
Exemple #10
0
 /// <summary>
 /// Recupera o método que recupera o identificador da chave estrangeira do modelo de dados informado.
 /// </summary>
 /// <returns></returns>
 public int GetLinkParentForeignKey(Colosoft.Data.IModel model)
 {
     return(GetForeignPropertyCompiled()((TLinkParentDataModel)model));
 }
Exemple #11
0
 /// <summary>
 /// Cria uma nova instancia da entidade associada.
 /// </summary>
 /// <param name="uiContext">Contexto de interface com o usuário.</param>
 /// <param name="entityTypeManager">Gerenciador do tipo da entidade.</param>
 /// <param name="dataModel">Modelo de dados que será usado com base.</param>
 /// <param name="sourceContext">Contexto de origem dos dados.</param>
 /// <returns></returns>
 public abstract IEntity Create(string uiContext, IEntityTypeManager entityTypeManager, Colosoft.Data.IModel dataModel, Colosoft.Query.ISourceContext sourceContext);
Exemple #12
0
 /// <summary>
 /// Recupera o identificador unico associadom com a instancia do modelo informado.
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public abstract int GetInstanceUid(Colosoft.Data.IModel model);