/// <summary>
 /// Identifica o inicio da carga do <see cref="Colosoft.Data.Schema.ITypeMetadata"/>
 /// informado.
 /// </summary>
 /// <param name="metadata"></param>
 public void OnBeginLoadTypeMetadata(Colosoft.Data.Schema.ITypeMetadata metadata)
 {
     lock (_observers)
         foreach (var i in _observers)
         {
             if (i is IDataCacheLoaderObserver)
             {
                 ((IDataCacheLoaderObserver)i).OnBeginLoadTypeMetadata(metadata);
             }
         }
 }
 /// <summary>
 /// Identifica o fim da carga dos dados
 /// </summary>
 /// <param name="metadata"></param>
 /// <param name="exception"></param>
 public void OnEndLoadTypeMetadata(Colosoft.Data.Schema.ITypeMetadata metadata, Exception exception)
 {
     lock (_observers)
         foreach (var i in _observers)
         {
             if (i is IDataCacheLoaderObserver)
             {
                 ((IDataCacheLoaderObserver)i).OnEndLoadTypeMetadata(metadata, exception);
             }
         }
 }
        /// <summary>
        /// Recupera o nome da coluna associado com as informações da entidade.
        /// </summary>
        /// <param name="entity">Entidade</param>
        /// <param name="propertyName">Nome da propriedade</param>
        /// <param name="translatedName">Nome traduzido que foi encontrado.</param>
        /// <param name="error">Erro ocorrido.</param>
        /// <returns>Retorna o nome da entidade</returns>
        private bool TryGetName(Colosoft.Query.EntityInfo entity, string propertyName, out Colosoft.Query.ITranslatedName translatedName, out Exception error)
        {
            entity.Require("entity").NotNull();
            entity.Require("columnName").NotNull();
            Colosoft.Data.Schema.IPropertyMetadata propertyMetadata = null;
            Colosoft.Data.Schema.ITypeMetadata     typeMetadata     = null;
            try
            {
                typeMetadata     = GetTypeMetadata(entity.FullName);
                propertyMetadata = typeMetadata[propertyName];
            }
            catch
            {
            }
            string name;

            if (propertyMetadata == null)
            {
                if (StringComparer.InvariantCultureIgnoreCase.Equals(propertyName, "TableId"))
                {
                    var identityMetadatas = typeMetadata.GetKeyProperties();
                    using (var identityEnumerator = identityMetadatas.GetEnumerator())
                    {
                        identityEnumerator.MoveNext();
                        var identityMetadata = identityEnumerator.Current;
                        if (identityEnumerator.MoveNext())
                        {
                            translatedName = null;
                            error          = new NotSupportedException(ResourceMessageFormatter.Create(() => Properties.Resources.NotSupportedException_TableIdOnlySupportedInNonCompositePrimaryKeyTable, typeMetadata.FullName).Format());
                            return(false);
                        }
                        else
                        {
                            name = identityMetadata.Name;
                        }
                    }
                }
                else
                {
                    name = propertyName;
                }
            }
            else
            {
                name = propertyMetadata.Name;
            }
            translatedName = new TranslatedPropertyName(name, entity.Alias, null);
            error          = null;
            return(true);
        }
示例#4
0
        /// <summary>
        /// Recupera usado para recupera a consulta associada com a ação.
        /// </summary>
        /// <param name="action"></param>
        /// <param name="typeMetadata"></param>
        /// <returns></returns>
        private Query.Queryable GetActionQuery(PersistenceAction action, Colosoft.Data.Schema.ITypeMetadata typeMetadata)
        {
            var                   query               = _sourceContext.CreateQuery();
            StringBuilder         wherePart           = new StringBuilder();
            List <QueryParameter> wherePartParameters = new List <QueryParameter>();
            bool                  isFirstWhere        = true;

            for (int i = 0; i < action.Parameters.Count; i++)
            {
                var propertyMetadata = typeMetadata[action.Parameters[i].Name];
                if (propertyMetadata != null && (propertyMetadata.ParameterType == Colosoft.Data.Schema.PersistenceParameterType.IdentityKey || propertyMetadata.ParameterType == Colosoft.Data.Schema.PersistenceParameterType.Key))
                {
                    if (action.Conditional != null)
                    {
                        continue;
                    }
                    wherePartParameters.Add(new QueryParameter("?" + action.Parameters[i].Name, action.Parameters[i].Value));
                    if (!isFirstWhere)
                    {
                        wherePart.Append(" && ");
                    }
                    else
                    {
                        isFirstWhere = false;
                    }
                    wherePart.Append(action.Parameters[i].Name).Append("=?").Append(action.Parameters[i].Name);
                }
            }
            if (action.Conditional == null && wherePart.Length > 0)
            {
                query.WhereClause = ConditionalContainer.Parse(wherePart.ToString(), wherePartParameters.ToArray());
            }
            else if (action.Conditional != null)
            {
                query.WhereClause = action.Conditional;
            }
            query.From(new EntityInfo()
            {
                Alias    = null,
                FullName = typeMetadata.FullName
            });
            return(query);
        }
示例#5
0
        /// <summary>
        /// Recupera os campos do registro.
        /// </summary>
        /// <param name="entityFullName"></param>
        /// <param name="typeMetadata"></param>
        /// <returns></returns>
        private static List <Record.Field> GetRecordFields(string entityFullName, Colosoft.Data.Schema.ITypeMetadata typeMetadata)
        {
            var recordFields = new List <Colosoft.Query.Record.Field>();

            foreach (var propertyMetadata in typeMetadata)
            {
                Type propertyType = null;
                try
                {
                    propertyType = Type.GetType(propertyMetadata.PropertyType, true);
                }
                catch (Exception ex)
                {
                    throw new Exception(ResourceMessageFormatter.Create(() => Properties.Resources.CachePersistenceExecuter_GetPropertyTypeFromPropertyMetadataError, propertyMetadata.PropertyType, propertyMetadata.Name, entityFullName).Format(), ex);
                }
                recordFields.Add(new Colosoft.Query.Record.Field(propertyMetadata.Name, propertyType));
            }
            if (typeMetadata.IsVersioned && !recordFields.Exists(f => StringComparer.InvariantCultureIgnoreCase.Equals(f.Name, "RowVersion")))
            {
                recordFields.Add(new Colosoft.Query.Record.Field("RowVersion", typeof(long)));
            }
            return(recordFields);
        }