예제 #1
0
 public void OnEvict(EvictEvent @event)
 {
     try
     {
         _defaultEvictEventListener.OnEvict(@event);
     }
     catch (Exception ex)
     {
         throw new InvalidOperationException("Error trying to evict: {0}".InvariantFormat(GetUsefulEntityName(@event.Entity, null, null)), ex);
     }
 }
		public virtual void OnEvict(EvictEvent @event)
		{
			IEventSource source = @event.Session;
			object obj = @event.Entity;
			IPersistenceContext persistenceContext = source.PersistenceContext;

			if (obj is INHibernateProxy)
			{
				ILazyInitializer li = ((INHibernateProxy)obj).HibernateLazyInitializer;
				object id = li.Identifier;
				IEntityPersister persister = source.Factory.GetEntityPersister(li.EntityName);
				if (id == null)
				{
					throw new ArgumentException("null identifier");
				}
				EntityKey key = new EntityKey(id, persister, source.EntityMode);
				persistenceContext.RemoveProxy(key);
				if (!li.IsUninitialized)
				{
					object entity = persistenceContext.RemoveEntity(key);
					if (entity != null)
					{
						EntityEntry e = @event.Session.PersistenceContext.RemoveEntry(entity);
						DoEvict(entity, key, e.Persister, @event.Session);
					}
				}
				li.Session = null;
			}
			else
			{
				EntityEntry e = persistenceContext.RemoveEntry(obj);
				if (e != null)
				{
					EntityKey key = new EntityKey(e.Id, e.Persister, source.EntityMode);
					persistenceContext.RemoveEntity(key);
					DoEvict(obj, key, e.Persister, source);
				}
			}
		}
        public virtual void OnEvict(EvictEvent @event)
        {
            IEventSource        source             = @event.Session;
            object              obj                = @event.Entity;
            IPersistenceContext persistenceContext = source.PersistenceContext;

            if (obj is INHibernateProxy)
            {
                ILazyInitializer li        = ((INHibernateProxy)obj).HibernateLazyInitializer;
                object           id        = li.Identifier;
                IEntityPersister persister = source.Factory.GetEntityPersister(li.EntityName);
                if (id == null)
                {
                    throw new ArgumentException("null identifier");
                }
                EntityKey key = new EntityKey(id, persister, source.EntityMode);
                persistenceContext.RemoveProxy(key);
                if (!li.IsUninitialized)
                {
                    object entity = persistenceContext.RemoveEntity(key);
                    if (entity != null)
                    {
                        EntityEntry e = @event.Session.PersistenceContext.RemoveEntry(entity);
                        DoEvict(entity, key, e.Persister, @event.Session);
                    }
                }
                li.Session = null;
            }
            else
            {
                EntityEntry e = persistenceContext.RemoveEntry(obj);
                if (e != null)
                {
                    EntityKey key = new EntityKey(e.Id, e.Persister, source.EntityMode);
                    persistenceContext.RemoveEntity(key);
                    DoEvict(obj, key, e.Persister, source);
                }
            }
        }
        public virtual async Task OnEvictAsync(EvictEvent @event, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            IEventSource        source             = @event.Session;
            object              obj                = @event.Entity;
            IPersistenceContext persistenceContext = source.PersistenceContext;

            if (obj.IsProxy())
            {
                ILazyInitializer li        = ((INHibernateProxy)obj).HibernateLazyInitializer;
                object           id        = li.Identifier;
                IEntityPersister persister = source.Factory.GetEntityPersister(li.EntityName);
                if (id == null)
                {
                    throw new ArgumentException("null identifier");
                }
                EntityKey key = source.GenerateEntityKey(id, persister);
                persistenceContext.RemoveProxy(key);
                if (!li.IsUninitialized)
                {
                    object entity = persistenceContext.RemoveEntity(key);
                    if (entity != null)
                    {
                        EntityEntry e = @event.Session.PersistenceContext.RemoveEntry(entity);
                        await(DoEvictAsync(entity, key, e.Persister, @event.Session, cancellationToken)).ConfigureAwait(false);
                    }
                }
                li.UnsetSession();
            }
            else
            {
                EntityEntry e = persistenceContext.RemoveEntry(obj);
                if (e != null)
                {
                    persistenceContext.RemoveEntity(e.EntityKey);
                    await(DoEvictAsync(obj, e.EntityKey, e.Persister, source, cancellationToken)).ConfigureAwait(false);
                }
            }
        }
예제 #5
0
 public void OnEvict(EvictEvent @event)
 {
     log.Debug("OnEvict :" + @event);
 }