/// <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]);
             }
         }
     }
 }
예제 #2
0
 /// <summary>
 /// Atualiza os dados contidos no objUpdate no BD.
 /// </summary>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <exception cref="System.ArgumentNullException"></exception>
 /// <exception cref="GDAConditionalClauseException">Parameters do not exist to build the conditional clause.</exception>
 /// <exception cref="GDAException"></exception>
 /// <returns>Número de linhas afetadas.</returns>
 public int Update(GDASession session, DirectionPropertiesName direction)
 {
     return(GDAOperations.Update(session, _instance, this.ToString(), direction));
 }
예제 #3
0
 /// <summary>
 /// Inseri o registro no BD.
 /// </summary>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave gerada no processo.</returns>
 /// <exception cref="GDAException"></exception>
 /// <exception cref="GDAReferenceDAONotFoundException"></exception>
 public uint Insert(GDASession session, DirectionPropertiesName direction)
 {
     return(GDAOperations.Insert(session, _instance, this.ToString(), direction));
 }
예제 #4
0
 /// <summary>
 /// Inseri os dados contidos no objInsert no BD.
 /// </summary>
 /// <param name="session">Sessão utilizada para a execução do comando.</param>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que serão inseridos no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave inserido.</returns>
 /// <exception cref="ArgumentNullException">ObjInsert it cannot be null.</exception>
 /// <exception cref="GDAException"></exception>
 public uint Insert(GDASession session, string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(GDA.GDAOperations.Insert(session, this, propertiesNamesInsert, direction));
 }
예제 #5
0
 /// <summary>
 /// Inseri os dados contidos no objInsert no BD.
 /// </summary>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que serão inseridos no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave inserido.</returns>
 /// <exception cref="ArgumentNullException">ObjInsert it cannot be null.</exception>
 /// <exception cref="GDAException"></exception>
 public uint Insert(string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(Insert(null, propertiesNamesInsert, direction));
 }
예제 #6
0
 /// <summary>
 /// Atualiza os dados contidos no objUpdate no BD.
 /// </summary>
 /// <param name="session">Sessão utilizada para a execução do comando.</param>
 /// <param name="objUpdate">Objeto com os dados a serem atualizados.</param>
 /// <param name="propertiesNamesUpdate">Nome das propriedades separados por virgula, que serão atualizadas no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <exception cref="System.ArgumentNullException"></exception>
 /// <exception cref="GDAConditionalClauseException">Parameters do not exist to build the conditional clause.</exception>
 /// <exception cref="GDAException"></exception>
 /// <returns>Número de linhas afetadas.</returns>
 public virtual int Update(GDASession session, object objUpdate, string propertiesNamesUpdate, DirectionPropertiesName direction)
 {
     return(CurrentPersistenceObject.Update(session, (Model)objUpdate, propertiesNamesUpdate, direction));
 }
예제 #7
0
 /// <summary>
 /// Atualiza os dados contidos no objUpdate no BD.
 /// </summary>
 /// <param name="model">Model contendo os dados a serem atualizados.</param>
 /// <param name="propertiesNamesUpdate">Nome das propriedades separadas por virgula, que serão atualizadas no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <exception cref="System.ArgumentNullException"></exception>
 /// <exception cref="GDAConditionalClauseException">Parameters do not exist to build the conditional clause.</exception>
 /// <exception cref="GDAException"></exception>
 /// <returns>Número de linhas afetadas.</returns>
 public static int Update(this object model, string propertiesNamesUpdate, DirectionPropertiesName direction)
 {
     return(GDAOperations.Update(model, propertiesNamesUpdate, direction));
 }
예제 #8
0
 /// <summary>
 /// Inseri os dados contidos no objInsert no BD.
 /// </summary>
 /// <param name="objInsert">Objeto com os dados a serem inseridos.</param>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que serão inseridos no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave inserido.</returns>
 /// <exception cref="ArgumentNullException">ObjInsert it cannot be null.</exception>
 /// <exception cref="GDAException"></exception>
 public virtual uint Insert(object objInsert, string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(Insert((Model)objInsert, propertiesNamesInsert, direction));
 }
 /// <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));
 }
 /// <summary>
 /// Recupera as propriedades de persistencia que são usadas pela ação de atualização.
 /// </summary>
 /// <param name="instanceType"></param>
 /// <param name="propertyNames"></param>
 /// <param name="direction"></param>
 /// <param name="typeMetadata"></param>
 /// <param name="isConditional"></param>
 /// <returns></returns>
 private IEnumerable <System.Reflection.PropertyInfo> GetDeletePersistenceProperties(Type instanceType, string[] propertyNames, DirectionPropertiesName direction, ITypeMetadata typeMetadata, bool isConditional)
 {
     if (isConditional)
     {
         return(Enumerable.Empty <System.Reflection.PropertyInfo>());
     }
     else
     {
         return(typeMetadata.GetKeyProperties().Select(f => instanceType.GetProperty(f.Name)).Where(f => f != null));
     }
 }
예제 #11
0
 /// <summary>
 /// Atualiza os dados contidos no objUpdate no BD.
 /// </summary>
 /// <param name="model">Model contendo os dados a serem atualizados.</param>
 /// <param name="propertiesNamesUpdate">Nome das propriedades separadas por virgula, que ser�o atualizadas no comando.</param>
 /// <param name="direction">Dire��o que os nomes das propriedades ter�o no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <exception cref="System.ArgumentNullException"></exception>
 /// <exception cref="GDAConditionalClauseException">Parameters do not exist to build the conditional clause.</exception>
 /// <exception cref="GDAException"></exception>
 /// <returns>N�mero de linhas afetadas.</returns>
 public static int Update(object model, string propertiesNamesUpdate, DirectionPropertiesName direction)
 {
     return(GetDAO(model).Update(model, propertiesNamesUpdate, direction));
 }
예제 #12
0
 /// <summary>
 /// Inseri o registro no BD.
 /// </summary>
 /// <param name="session">Sess�o utilizada para a execu��o do comando.</param>
 /// <param name="model">Model contendo os dados a serem inseridos.</param>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que ser�o inseridos no comando.</param>
 /// <param name="direction">Dire��o que os nomes das propriedades ter�o no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave gerada no processo.</returns>
 /// <exception cref="GDAException"></exception>
 /// <exception cref="GDAReferenceDAONotFoundException"></exception>
 public static uint Insert(GDASession session, object model, string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(GetDAO(model).Insert(session, model, propertiesNamesInsert, direction));
 }
예제 #13
0
 /// <summary>
 /// Inseri o registro no BD.
 /// </summary>
 /// <param name="model">Model contendo os dados a serem inseridos.</param>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que ser�o inseridos no comando.</param>
 /// <param name="direction">Dire��o que os nomes das propriedades ter�o no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave gerada no processo.</returns>
 /// <exception cref="GDAException"></exception>
 /// <exception cref="GDAReferenceDAONotFoundException"></exception>
 public static uint Insert(object model, string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(Insert(null, model, propertiesNamesInsert, direction));
 }
예제 #14
0
 /// <summary>
 /// Inseri os dados contidos no objInsert no BD.
 /// </summary>
 /// <param name="objInsert">Objeto com os dados a serem inseridos.</param>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que serão inseridos no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave inserido.</returns>
 /// <exception cref="ArgumentNullException">ObjInsert it cannot be null.</exception>
 /// <exception cref="GDAException"></exception>
 public virtual uint Insert(Model objInsert, string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(CurrentPersistenceObject.Insert(objInsert, propertiesNamesInsert, direction));
 }
        /// <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();
        }
예제 #16
0
 /// <summary>
 /// Atualiza os dados contidos no objUpdate no BD.
 /// </summary>
 /// <param name="objUpdate">Objeto com os dados a serem atualizados.</param>
 /// <param name="propertiesNamesUpdate">Nome das propriedades separados por virgula, que serão atualizadas no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <exception cref="System.ArgumentNullException"></exception>
 /// <exception cref="GDAConditionalClauseException">Parameters do not exist to build the conditional clause.</exception>
 /// <exception cref="GDAException"></exception>
 /// <returns>Número de linhas afetadas.</returns>
 public virtual int Update(Model objUpdate, string propertiesNamesUpdate, DirectionPropertiesName direction)
 {
     return(CurrentPersistenceObject.Update(objUpdate, propertiesNamesUpdate, direction));
 }
        /// <summary>
        /// Recupera as propriedades de persistencia que são usadas pela ação de inserção.
        /// </summary>
        /// <param name="instanceType"></param>
        /// <param name="propertyNames"></param>
        /// <param name="direction"></param>
        /// <param name="typeMetadata"></param>
        /// <returns></returns>
        private IEnumerable <System.Reflection.PropertyInfo> GetInsertPersistenceProperties(Type instanceType, string[] propertyNames, DirectionPropertiesName direction, ITypeMetadata typeMetadata)
        {
            var parameterTypes = new PersistenceParameterType[] {
                PersistenceParameterType.Field
            };
            var directions = new DirectionParameter[] {
                DirectionParameter.Output,
                DirectionParameter.InputOptionalOutput,
                DirectionParameter.InputOutput,
                DirectionParameter.OutputOnlyInsert,
                DirectionParameter.OnlyInsert,
                DirectionParameter.InputOptionalOutputOnlyInsert
            };
            var mapping = typeMetadata.Where(f => directions.Contains(f.Direction) && parameterTypes.Contains(f.ParameterType)).ToList();

            FilterMapping(propertyNames, direction, mapping, typeMetadata, PersistenceActionType.Insert);
            var keyMapping = typeMetadata.GetKeyProperties();

            return(mapping.Union(keyMapping, PropertyMetadataEqualityComparer.Instance).Select(f => instanceType.GetProperty(f.Name)).Where(f => f != null));
        }
예제 #18
0
 /// <summary>
 /// Atualiza os dados contidos no objUpdate no BD.
 /// </summary>
 /// <param name="objUpdate">Objeto com os dados a serem atualizados.</param>
 /// <param name="propertiesNamesUpdate">Nome das propriedades separados por virgula, que serão atualizadas no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <exception cref="System.ArgumentNullException"></exception>
 /// <exception cref="GDAConditionalClauseException">Parameters do not exist to build the conditional clause.</exception>
 /// <exception cref="GDAException"></exception>
 /// <returns>Número de linhas afetadas.</returns>
 public virtual int Update(object objUpdate, string propertiesNamesUpdate, DirectionPropertiesName direction)
 {
     return(Update((Model)objUpdate, propertiesNamesUpdate, direction));
 }
예제 #19
0
 /// <summary>
 /// Atualiza os dados contidos no objUpdate no BD.
 /// </summary>
 /// <param name="propertiesNamesUpdate">Nome das propriedades separados por virgula, que serão atualizadas no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <exception cref="System.ArgumentNullException"></exception>
 /// <exception cref="GDAConditionalClauseException">Parameters do not exist to build the conditional clause.</exception>
 /// <exception cref="GDAException"></exception>
 /// <returns>Número de linhas afetadas.</returns>
 public virtual int Update(string propertiesNamesUpdate, DirectionPropertiesName direction)
 {
     return(GDAOperations.Update(null, this, propertiesNamesUpdate, direction));
 }
예제 #20
0
 /// <summary>
 /// Inseri o registro no BD.
 /// </summary>
 /// <param name="session">Sessão utilizada para a execução do comando.</param>
 /// <param name="model">Model contendo os dados a serem inseridos.</param>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que serão inseridos no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave gerada no processo.</returns>
 /// <exception cref="GDAException"></exception>
 /// <exception cref="GDAReferenceDAONotFoundException"></exception>
 public static uint Insert(this object model, GDASession session, string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(GDAOperations.Insert(session, model, propertiesNamesInsert, direction));
 }
예제 #21
0
 /// <summary>
 /// Inseri os dados contidos no objInsert no BD.
 /// </summary>
 /// <param name="session">Sessão utilizada para a execução do comando.</param>
 /// <param name="objInsert">Objeto com os dados a serem inseridos.</param>
 /// <param name="propertiesNamesInsert">Nome das propriedades separados por virgula, que serão inseridos no comando.</param>
 /// <param name="direction">Direção que os nomes das propriedades terão no comando. (Default: DirectionPropertiesName.Inclusion)</param>
 /// <returns>Chave inserido.</returns>
 /// <exception cref="ArgumentNullException">ObjInsert it cannot be null.</exception>
 /// <exception cref="GDAException"></exception>
 public virtual uint Insert(GDASession session, object objInsert, string propertiesNamesInsert, DirectionPropertiesName direction)
 {
     return(CurrentPersistenceObject.Insert(session, (Model)objInsert, propertiesNamesInsert, direction));
 }