HashSet != ISet. With .NET4.0 we will have the ISet interface and, perhaps, we can remove the usage of the wonderful Iesi collection... sig :(
2009/12/23 Stephane Farges <[email protected]> > Hi, > > I've been using HashSet<T> to map set collections for some time now, > but I just got the exception below when doing a SaveOrUpdateCopy. In > this case, a child has been added to the object being saved(actually > several levels below in the hierarchy of objects), and this child > contains the HashSet object. > For now, I resolved the problem by replacing "new HashSet<T>" by "new > Iesi.Collections.Generic.HashedSet<T>" in the constructor of the new > child object. > > Is it a bug ? or am I doing something wrong ? > > Thanks for your help. > > System.InvalidCastException: Unable to cast object of type > 'System.Collections.Generic.HashSet`1 > [Catalogue.Domain.DescriptionBibliotheque]' to type > 'Iesi.Collections.ISet'. > à NHibernate.Type.SetType.Clear(Object collection) dans \src > \NHibernate\Type\SetType.cs:ligne 70 > à NHibernate.Type.CollectionType.ReplaceElements(Object original, > Object target, Object owner, IDictionary copyCache, > ISessionImplementor session) dans \src\NHibernate\Type > \CollectionType.cs:ligne 369 > à NHibernate.Type.CollectionType.Replace(Object original, Object > target, ISessionImplementor session, Object owner, IDictionary > copyCache) dans \src\NHibernate\Type\CollectionType.cs:ligne 350 > à NHibernate.Type.AbstractType.Replace(Object original, Object > target, ISessionImplementor session, Object owner, IDictionary > copyCache, ForeignKeyDirection foreignKeyDirection) dans \src > \NHibernate\Type\AbstractType.cs:ligne 213 > à NHibernate.Type.TypeFactory.ReplaceAssociations(Object[] > original, Object[] target, IType[] types, ISessionImplementor session, > Object owner, IDictionary copyCache, ForeignKeyDirection > foreignKeyDirection) dans \src\NHibernate\Type\TypeFactory.cs:ligne > 1140 > à NHibernate.Event.Default.DefaultMergeEventListener.CopyValues > (IEntityPersister persister, Object entity, Object target, > ISessionImplementor source, IDictionary copyCache, ForeignKeyDirection > foreignKeyDirection) dans \src\NHibernate\Event\Default > \DefaultMergeEventListener.cs:ligne 370 > à > NHibernate.Event.Default.DefaultMergeEventListener.EntityIsTransient > (MergeEvent event, IDictionary copyCache) dans \src\NHibernate\Event > \Default\DefaultMergeEventListener.cs:ligne 181 > à NHibernate.Event.Default.DefaultMergeEventListener.OnMerge > (MergeEvent event, IDictionary copyCache) dans \src\NHibernate\Event > \Default\DefaultMergeEventListener.cs:ligne 115 > à NHibernate.Impl.SessionImpl.FireSaveOrUpdateCopy(IDictionary > copiedAlready, MergeEvent event) dans \src\NHibernate\Impl > \SessionImpl.cs:ligne 2660 > à NHibernate.Impl.SessionImpl.SaveOrUpdateCopy(String entityName, > Object obj, IDictionary copiedAlready) dans \src\NHibernate\Impl > \SessionImpl.cs:ligne 973 > à > NHibernate.Engine.CascadingAction.SaveUpdateCopyCascadingAction.Cascade > (IEventSource session, Object child, String entityName, Object > anything, Boolean isCascadeDeleteEnabled) dans \src\NHibernate\Engine > \CascadingAction.cs:ligne 298 > à NHibernate.Engine.Cascade.CascadeToOne(Object child, IType type, > CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) > dans \src\NHibernate\Engine\Cascade.cs:ligne 213 > à NHibernate.Engine.Cascade.CascadeAssociation(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 181 > à NHibernate.Engine.Cascade.CascadeProperty(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 148 > à NHibernate.Engine.Cascade.CascadeComponent(Object child, > IAbstractComponentType componentType, Object anything) dans \src > \NHibernate\Engine\Cascade.cs:ligne 172 > à NHibernate.Engine.Cascade.CascadeProperty(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 153 > à NHibernate.Engine.Cascade.CascadeCollectionElements(Object child, > CollectionType collectionType, CascadeStyle style, IType elemType, > Object anything, Boolean isCascadeDeleteEnabled) dans \src\NHibernate > \Engine\Cascade.cs:ligne 232 > à NHibernate.Engine.Cascade.CascadeCollection(Object child, > CascadeStyle style, Object anything, CollectionType type) dans \src > \NHibernate\Engine\Cascade.cs:ligne 201 > à NHibernate.Engine.Cascade.CascadeAssociation(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 185 > à NHibernate.Engine.Cascade.CascadeProperty(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 148 > à NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister, > Object parent, Object anything) dans \src\NHibernate\Engine > \Cascade.cs:ligne 126 > à > NHibernate.Event.Default.AbstractSaveEventListener.CascadeAfterSave > (IEventSource source, IEntityPersister persister, Object entity, > Object anything) dans \src\NHibernate\Event\Default > \AbstractSaveEventListener.cs:ligne 370 > à > NHibernate.Event.Default.DefaultMergeEventListener.EntityIsTransient > (MergeEvent event, IDictionary copyCache) dans \src\NHibernate\Event > \Default\DefaultMergeEventListener.cs:ligne 180 > à NHibernate.Event.Default.DefaultMergeEventListener.OnMerge > (MergeEvent event, IDictionary copyCache) dans \src\NHibernate\Event > \Default\DefaultMergeEventListener.cs:ligne 115 > à NHibernate.Impl.SessionImpl.FireSaveOrUpdateCopy(IDictionary > copiedAlready, MergeEvent event) dans \src\NHibernate\Impl > \SessionImpl.cs:ligne 2660 > à NHibernate.Impl.SessionImpl.SaveOrUpdateCopy(String entityName, > Object obj, IDictionary copiedAlready) dans \src\NHibernate\Impl > \SessionImpl.cs:ligne 973 > à > NHibernate.Engine.CascadingAction.SaveUpdateCopyCascadingAction.Cascade > (IEventSource session, Object child, String entityName, Object > anything, Boolean isCascadeDeleteEnabled) dans \src\NHibernate\Engine > \CascadingAction.cs:ligne 298 > à NHibernate.Engine.Cascade.CascadeToOne(Object child, IType type, > CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) > dans \src\NHibernate\Engine\Cascade.cs:ligne 213 > à NHibernate.Engine.Cascade.CascadeAssociation(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 181 > à NHibernate.Engine.Cascade.CascadeProperty(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 148 > à NHibernate.Engine.Cascade.CascadeCollectionElements(Object child, > CollectionType collectionType, CascadeStyle style, IType elemType, > Object anything, Boolean isCascadeDeleteEnabled) dans \src\NHibernate > \Engine\Cascade.cs:ligne 232 > à NHibernate.Engine.Cascade.CascadeCollection(Object child, > CascadeStyle style, Object anything, CollectionType type) dans \src > \NHibernate\Engine\Cascade.cs:ligne 201 > à NHibernate.Engine.Cascade.CascadeAssociation(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 185 > à NHibernate.Engine.Cascade.CascadeProperty(Object child, IType > type, CascadeStyle style, Object anything, Boolean > isCascadeDeleteEnabled) dans \src\NHibernate\Engine\Cascade.cs:ligne > 148 > à NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister, > Object parent, Object anything) dans \src\NHibernate\Engine > \Cascade.cs:ligne 126 > à NHibernate.Event.Default.DefaultMergeEventListener.CascadeOnMerge > (IEventSource source, IEntityPersister persister, Object entity, > IDictionary copyCache) dans \src\NHibernate\Event\Default > \DefaultMergeEventListener.cs:ligne 398 > à > NHibernate.Event.Default.DefaultMergeEventListener.EntityIsDetached > (MergeEvent event, IDictionary copyCache) dans \src\NHibernate\Event > \Default\DefaultMergeEventListener.cs:ligne 263 > à NHibernate.Event.Default.DefaultMergeEventListener.OnMerge > (MergeEvent event, IDictionary copyCache) dans \src\NHibernate\Event > \Default\DefaultMergeEventListener.cs:ligne 118 > à NHibernate.Event.Default.DefaultMergeEventListener.OnMerge > (MergeEvent event) dans \src\NHibernate\Event\Default > \DefaultMergeEventListener.cs:ligne 40 > à NHibernate.Impl.SessionImpl.FireSaveOrUpdateCopy(MergeEvent > event) dans \src\NHibernate\Impl\SessionImpl.cs:ligne 2673 > à NHibernate.Impl.SessionImpl.SaveOrUpdateCopy(Object obj) dans \src > \NHibernate\Impl\SessionImpl.cs:ligne 2159 > > -- > > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<nhusers%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > > -- Fabio Maulo -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
