Exemplo n.º 1
0
        /// <summary>
        /// Adiciona comando para recuperar o rowVersion e dados voláteis após ação de persistência.
        /// </summary>
        /// <param name="info">Nome da entidade de persistência</param>
        /// <param name="keyIndexes">Índice do parâmetro da chave primária</param>
        /// <param name="metadata">Metadados da entidade.</param>
        /// <param name="sqlCommand">Objeto <see cref="StringBuilder"/> no qual será adicionado texto</param>
        /// <returns></returns>
        private DefaultPersistenceSqlParser AppendGetRowVersionAndVolatilePropertiesExpression(EntityInfo info, IEnumerable <Tuple <int, IPropertyMetadata> > keyIndexes, ITypeMetadata metadata, StringBuilder sqlCommand)
        {
            var volatileProperties = metadata.GetVolatileProperties();

            if (!metadata.IsVersioned && !volatileProperties.Any())
            {
                return(this);
            }
            bool isFirst = true;

            Append(" SELECT ", sqlCommand);
            if (metadata.IsVersioned)
            {
                Append('?', sqlCommand).Append(DataAccessConstants.RowVersionPropertyName, sqlCommand).Append("=CAST([", sqlCommand).Append(DataAccessConstants.RowVersionColumnName, sqlCommand).Append("] AS BIGINT)", sqlCommand);
                isFirst = false;
            }
            foreach (var property in metadata.GetVolatileProperties())
            {
                if (!isFirst)
                {
                    Append(", ", sqlCommand);
                }
                else
                {
                    isFirst = false;
                }
                Append('?', sqlCommand).Append(property.Name, sqlCommand).Append('=', sqlCommand).AppendQuoteExpression(property.ColumnName, sqlCommand);
            }
            isFirst = true;
            Append(" FROM ", sqlCommand).AppendTranslatedName(Translator.GetName(info), sqlCommand).Append(" WHERE ", sqlCommand);
            foreach (var i in keyIndexes)
            {
                if (!isFirst)
                {
                    Append(" AND ", sqlCommand);
                }
                else
                {
                    isFirst = false;
                }
                AppendQuoteExpression(i.Item2.ColumnName, sqlCommand).Append("=?", sqlCommand).Append(Action.Parameters[i.Item1].Name, sqlCommand);
            }
            return(this);
        }