Description
Jenar created an issue — 7th June 2013, 6:59:30:
In rev 3.2.0 and 3.3.3 i am still getting this Exception (as already reported in closed NH-1845, because test could not reproduce it):
bei System.ThrowHelper.ThrowKeyNotFoundException() bei System.Collections.Generic.Dictionary`2.get_Item(TKey key) bei NHibernate.Engine.StatefulPersistenceContext.RemoveEntity(EntityKey key) bei NHibernate.Event.Default.DefaultEvictEventListener.OnEvict(EvictEvent event) bei NHibernate.Impl.SessionImpl.FireEvict(EvictEvent evictEvent) bei NHibernate.Impl.SessionImpl.Evict(Object obj) bei NHibernate.Engine.CascadingAction.EvictCascadingAction.Cascade(IEventSource session, Object child, String entityName, Object anything, Boolean isCascadeDeleteEnabled) bei NHibernate.Engine.Cascade.CascadeToOne(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) bei NHibernate.Engine.Cascade.CascadeAssociation(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) bei NHibernate.Engine.Cascade.CascadeProperty(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) bei NHibernate.Engine.Cascade.CascadeCollectionElements(Object parent, Object child, CollectionType collectionType, CascadeStyle style, IType elemType, Object anything, Boolean isCascadeDeleteEnabled) bei NHibernate.Engine.Cascade.CascadeCollection(Object parent, Object child, CascadeStyle style, Object anything, CollectionType type) bei NHibernate.Engine.Cascade.CascadeAssociation(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) bei NHibernate.Engine.Cascade.CascadeProperty(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) bei NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister, Object parent, Object anything) bei NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister, Object parent) bei NHibernate.Event.Default.DefaultEvictEventListener.DoEvict(Object obj, EntityKey key, IEntityPersister persister, IEventSource session) bei NHibernate.Event.Default.DefaultEvictEventListener.OnEvict(EvictEvent event) bei NHibernate.Impl.SessionImpl.FireEvict(EvictEvent evictEvent) bei NHibernate.Impl.SessionImpl.Evict(Object obj)
So please add this path to next release as suggested long time ago in https://forum.hibernate.org/viewtopic.php?f=25&t=993443&view=previous
Index: StatefulPersistenceContext.cs ===================================================== --- StatefulPersistenceContext.cs (revision 10712) +++ StatefulPersistenceContext.cs (revision 10713) @@ -430,6 +430,9 @@ /// </summary> public object RemoveEntity(EntityKey key) { + if (!entitiesByKey.ContainsKey(key)) + return null; + object tempObject = entitiesByKey[key]; entitiesByKey.Remove(key); object entity = tempObject;:Unfortunately i can't give you test because it is beeing thrown in our project with a little bit complicated Object structure (BO) and it occurs only from time to time.
Anyway, this patch is WORTH TO BE ADDED.
Thank you
Jenar added a comment — 10th June 2013, 12:38:38:
I think this exception could happend if mapping for Object_A will somehow contain a collection ie.
<BAG>
with the same Object_A. And you will try to Evict Object_A