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