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);
                }
            }
        }
示例#2
0
        public virtual void OnEvict(EvictEvent @event)
        {
            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);
                        DoEvict(entity, key, e.Persister, @event.Session);
                    }
                }
                li.UnsetSession();
            }
            else
            {
                EntityEntry e = persistenceContext.RemoveEntry(obj);
                if (e != null)
                {
                    persistenceContext.RemoveEntity(e.EntityKey);
                    DoEvict(obj, e.EntityKey, e.Persister, source);
                }
            }
        }