示例#1
0
		/// <summary>
		/// Constrói um item do cache de banco de dados.
		/// </summary>
		/// <param name="entidade">Entidade do banco de dados.</param>
		/// <param name="validade">Validade do item no cache.</param>
		public CacheDbItem(DbManipulação entidade, DateTime validade, CacheDbChave chave)
		{
			this.entidade = entidade;
			this.validade = validade;
			this.chave    = chave;
			this.criação  = DateTime.Now;
			this.usos     = 0;

            if (entidade == null)
                this.copiar = false;
            else
            {
                this.copiar = (entidade.GetType().GetCustomAttributes(typeof(NãoCopiarCache), true).Length == 0);

                if (copiar)
                    this.entidade.Alterado += new DbManipulação.DbManipulaçãoHandler(AoAlterarEntidade);
            }
		}
示例#2
0
        /// <summary>
        /// Remove item do cache.
        /// </summary>
        /// <param name="entidade">Item a ser removido.</param>
        public void Remover(DbManipulação entidade)
        {
            CacheDbItem[] listaAntiga = new CacheDbItem[listaCache.Count];
            listaCache.CopyTo(listaAntiga);

            if (entidade != null)
            {
                Type tipo = entidade.GetType();

                foreach (CacheDbItem item in listaAntiga)
                    /* O tipo não pode ser comparado.
                        * Imagine que existe um item "Representante" em cache
                        * e deseja-se remover a mesma pessoa porém "PessoaFísica"
                        * Isso acontece na prática!
                        */
                    ///if (item.Entidade != null && item.Entidade.GetType() == tipo && entidade.Referente(item.Entidade))
                    if (item.Entidade != null && entidade.Referente(item.Entidade))
                    {
                        Remover(item);
                        //break;
                        /* Deve-se remover todas as instancias.
                            * Existe caso em que há mais de uma entidade repetida na cache.
                            * Como reproduzir ? Procure pessoa pelo codigo no atendimento faça alguma alteração e procure novamente.
                            */
                    }
            }
        }