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); } } }
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); } } }