/// <summary> /// Cria uma nova instancia já definindo os valores da ação. /// </summary> /// <param name="actionId">Identificador da ação.</param> /// <param name="type">Tipo de ação.</param> /// <param name="entityFullName">Nome da entidade associada com a ação.</param> /// <param name="parameters">Lista dos parametros da ação de persistencia.</param> /// <param name="instance">Instancia associada com a ação.</param> /// <param name="providerName"></param> /// <param name="callback">Instancia do callback registrado para a ação.</param> /// <param name="rowVersion">Identifica se tabela sobre a qual ocorrerá ação de persistência possui controle de versão.</param> /// <param name="conditional">Condicional para a execução da ação.</param> /// <param name="query">Consulta para a execução da ação.</param> public PersistenceAction(int actionId, PersistenceActionType type, string entityFullName, string providerName, IEnumerable <PersistenceParameter> parameters, object instance, PersistenceActionCallback callback, long?rowVersion, Query.ConditionalContainer conditional = null, Query.QueryInfo query = null) { this.ActionId = actionId; this.EntityFullName = entityFullName; this.ProviderName = providerName; if (parameters != null) { this.Parameters.AddRange(parameters); } this.Instance = instance; this.Callback = callback; this.Conditional = conditional; this.Query = query; this.Type = type; this.RowVersion = rowVersion; }
/// <summary> /// Filtra as propriedades mapeadas. /// </summary> /// <param name="propertyNames">Nome das propriedades que serão filtradas.</param> /// <param name="direction">Direção das propriedades.</param> /// <param name="mapping">Mapeamento onde o filtro será aplicado.</param> /// <param name="metadata">Metadados da entidade de persistência.</param> /// <param name="persistenceActionType">Tipo de ação de persistencia.</param> private void FilterMapping(string[] propertyNames, DirectionPropertiesName direction, List <IPropertyMetadata> mapping, ITypeMetadata metadata, PersistenceActionType persistenceActionType) { if (propertyNames != null && propertyNames.Length > 0) { List <int> indexs = new List <int>(propertyNames.Length); int i = 0; for (i = 0; i < propertyNames.Length; i++) { string p = propertyNames[i].Trim(); int index = mapping.FindIndex(m => m.Name == p); if (index >= 0) { indexs.Add(index); } } if (direction == DirectionPropertiesName.Inclusion) { var mapping2 = new List <IPropertyMetadata>(); for (i = 0; i < indexs.Count; i++) { mapping2.Add(mapping[indexs[i]]); } mapping.Clear(); mapping.AddRange(mapping2); } else { for (i = 0; i < indexs.Count; i++) { mapping.RemoveAt(indexs[i]); } } } }
/// <summary> /// Recupera as propriedades de persistencia. /// </summary> /// <param name="actionType"></param> /// <param name="instanceType"></param> /// <param name="propertyNames"></param> /// <param name="isConditional"></param> /// <param name="direction"></param> /// <returns></returns> protected override IEnumerable <System.Reflection.PropertyInfo> GetPersistenceProperties(PersistenceActionType actionType, Type instanceType, string[] propertyNames, bool isConditional, DirectionPropertiesName direction = DirectionPropertiesName.Inclusion) { var typeMetadata = TypeSchema.GetTypeMetadata(instanceType.FullName); if (typeMetadata == null) { throw new Exception(ResourceMessageFormatter.Create(() => Properties.Resources.Exception_TypeMetadataNotFound, instanceType.FullName).Format()); } if (actionType == PersistenceActionType.Insert) { return(GetInsertPersistenceProperties(instanceType, propertyNames, direction, typeMetadata)); } else if (actionType == PersistenceActionType.Update) { return(GetUpdatePersistenceProperties(instanceType, propertyNames, direction, typeMetadata, isConditional)); } else if (actionType == PersistenceActionType.Delete) { return(GetDeletePersistenceProperties(instanceType, propertyNames, direction, typeMetadata, isConditional)); } throw new NotSupportedException(); }
/// <summary> /// Recupera as propriedades que podem ser persistidas do tipo informado. /// </summary> /// <param name="actionType">Tipo de ação que será realizada.</param> /// <param name="instanceType">Tipo da instancia onde as propriedades estão inseridas.</param> /// <param name="propertyNames">Nomes das propriedades que se deseja utilizar.</param> /// <param name="isConditional">True se operação de persistência for condicional.</param> /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param> /// <returns></returns> protected internal override IEnumerable <System.Reflection.PropertyInfo> GetPersistenceProperties(PersistenceActionType actionType, Type instanceType, string[] propertyNames, bool isConditional, DirectionPropertiesName direction = DirectionPropertiesName.Inclusion) { return(_owner.GetPersistenceProperties(actionType, instanceType, propertyNames, isConditional, direction)); }