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.


Reply via email to