Ejemplo n.º 1
0
        /// <summary>
        /// Realiza cópia da entidade.
        /// </summary>
        /// <param name="item">Item na cache.</param>
        /// <returns>Cópia da entidade.</returns>
        private static object Copiar(CacheDbItem item)
        {
#if DEBUG
            Console.WriteLine("Copiando entidade " + item.ToString());
#endif

            DbManipulação cópia, original;

            original = item.Entidade;

            if (original is ICloneable)
                cópia = (DbManipulação)((ICloneable)original).Clone();
            else
            {
                Type tipo = original.GetType();

                cópia = (DbManipulação)tipo.Assembly.CreateInstance(tipo.FullName);

                foreach (FieldInfo campo in tipo.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance
                    | System.Reflection.BindingFlags.Public))
                {
                    campo.SetValue(cópia, campo.GetValue(original));
                }
            }

#if DEBUG
            if (cópia == null)
                throw new Exception("Cópia nula!");
#endif

            cópia.Alterado += new DbManipulação.DbManipulaçãoHandler(item.AoAlterarEntidade);

            return cópia;
        }
Ejemplo n.º 2
0
		/// <summary>
		/// Remove item do cache.
		/// </summary>
		/// <param name="item">Item a ser removido.</param>
		private void Remover(CacheDbItem item)
		{
#if DEBUG
            Console.WriteLine("Removendo da cache {0}", item.ToString());
#endif

			listaCache.Remove(item);
			hashCache.Remove(item.Chave);

            // Remove item da lista de referentes.
            if (item.Entidade != null)
                foreach (FieldInfo campo in item.Entidade.GetType().GetFields(BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Public))
                    if (campo.FieldType.IsSubclassOf(typeof(DbManipulação)))
                    {
                        DbManipulação obj = (DbManipulação)campo.GetValue(item.Entidade);

                        if (obj != null && obj.PossuiReferentes)
                            obj.Referentes.Remove(item.Entidade);
                    }
		}