예제 #1
0
 /// <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));
 }