On one of our NHibernate applications, when we enable second-level
cache using memcache, we have been getting the following error:

"Invalid cast from 'DateTime' to 'Int32'."

We can't reproduce it in our testing environment, it only gets thrown
in production.

We have tried both the memcache nhibernate cache plugin and the enyim
memcached nhibernate cache plugin, both exhibit the same results.

We use NHibernate Mapping Attributes to define mappings.

Here is the full stack trace:

System.InvalidCastException: Invalid cast from 'DateTime' to 'Int32'.
   at System.DateTime.System.IConvertible.ToInt32(IFormatProvider
provider)
   at System.Convert.ToInt32(Object value)
   at
NHibernate.Type.PersistentEnumType.SystemInt32EnumConverter.Convert(Object
input) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type
\PersistentEnumType.cs:line 88
   at
NHibernate.Type.PersistentEnumType.AbstractEnumConverter`1.ToObject(Type
enumClass, Object code) in d:\CSharp\NH\NH\nhibernate\src\NHibernate
\Type\PersistentEnumType.cs:line 33
   at NHibernate.Type.PersistentEnumType.GetInstance(Object code) in d:
\CSharp\NH\NH\nhibernate\src\NHibernate\Type
\PersistentEnumType.cs:line 203
   at NHibernate.Type.PersistentEnumType.Assemble(Object cached,
ISessionImplementor session, Object owner) in d:\CSharp\NH\NH
\nhibernate\src\NHibernate\Type\PersistentEnumType.cs:line 255
   at NHibernate.Type.TypeHelper.Assemble(Object[] row,
ICacheAssembler[] types, ISessionImplementor session, Object owner) in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\TypeHelper.cs:line 67
   at NHibernate.Cache.Entry.CacheEntry.Assemble(Object[] values,
Object result, Object id, IEntityPersister persister, IInterceptor
interceptor, ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate
\src\NHibernate\Cache\Entry\CacheEntry.cs:line 79
   at NHibernate.Cache.Entry.CacheEntry.Assemble(Object instance,
Object id, IEntityPersister persister, IInterceptor interceptor,
ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src
\NHibernate\Cache\Entry\CacheEntry.cs:line 72
   at
NHibernate.Event.Default.DefaultLoadEventListener.AssembleCacheEntry(CacheEntry
entry, Object id, IEntityPersister persister, LoadEvent event) in d:
\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 468
   at
NHibernate.Event.Default.DefaultLoadEventListener.LoadFromSecondLevelCache(LoadEvent
event, IEntityPersister persister, LoadType options) in d:\CSharp\NH\NH
\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 440
   at
NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent
event, IEntityPersister persister, EntityKey keyToLoad, LoadType
options) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 308
   at NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent
event, IEntityPersister persister, EntityKey keyToLoad, LoadType
options) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 104
   at
NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent
event, LoadType loadType) in d:\CSharp\NH\NH\nhibernate\src\NHibernate
\Event\Default\DefaultLoadEventListener.cs:line 69
   at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType
loadType) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl
\SessionImpl.cs:line 2468
   at NHibernate.Impl.SessionImpl.ImmediateLoad(String entityName,
Object id) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl
\SessionImpl.cs:line 1356
   at NHibernate.Proxy.AbstractLazyInitializer.Initialize() in d:
\CSharp\NH\NH\nhibernate\src\NHibernate\Proxy
\AbstractLazyInitializer.cs:line 125
   at NHibernate.ByteCode.Castle.LazyInitializer.Intercept(IInvocation
invocation) in d:\CSharp\NH\NH\nhibernate\src
\NHibernate.ByteCode.Castle\LazyInitializer.cs:line 61
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.GuestListProxy.get_MemberId()

Here is another stack trace, same error but from a different code
point:

System.InvalidCastException: Invalid cast from 'DateTime' to 'Int32'.
   at System.DateTime.System.IConvertible.ToInt32(IFormatProvider
provider)
   at System.Convert.ToInt32(Object value)
   at
NHibernate.Type.PersistentEnumType.SystemInt32EnumConverter.Convert(Object
input) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type
\PersistentEnumType.cs:line 88
   at
NHibernate.Type.PersistentEnumType.AbstractEnumConverter`1.ToObject(Type
enumClass, Object code) in d:\CSharp\NH\NH\nhibernate\src\NHibernate
\Type\PersistentEnumType.cs:line 33
   at NHibernate.Type.PersistentEnumType.GetInstance(Object code) in d:
\CSharp\NH\NH\nhibernate\src\NHibernate\Type
\PersistentEnumType.cs:line 203
   at NHibernate.Type.PersistentEnumType.Assemble(Object cached,
ISessionImplementor session, Object owner) in d:\CSharp\NH\NH
\nhibernate\src\NHibernate\Type\PersistentEnumType.cs:line 255
   at NHibernate.Type.TypeHelper.Assemble(Object[] row,
ICacheAssembler[] types, ISessionImplementor session, Object owner) in
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\TypeHelper.cs:line 67
   at NHibernate.Cache.Entry.CacheEntry.Assemble(Object[] values,
Object result, Object id, IEntityPersister persister, IInterceptor
interceptor, ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate
\src\NHibernate\Cache\Entry\CacheEntry.cs:line 79
   at NHibernate.Cache.Entry.CacheEntry.Assemble(Object instance,
Object id, IEntityPersister persister, IInterceptor interceptor,
ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src
\NHibernate\Cache\Entry\CacheEntry.cs:line 72
   at
NHibernate.Event.Default.DefaultLoadEventListener.AssembleCacheEntry(CacheEntry
entry, Object id, IEntityPersister persister, LoadEvent event) in d:
\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 468
   at
NHibernate.Event.Default.DefaultLoadEventListener.LoadFromSecondLevelCache(LoadEvent
event, IEntityPersister persister, LoadType options) in d:\CSharp\NH\NH
\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 440
   at
NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent
event, IEntityPersister persister, EntityKey keyToLoad, LoadType
options) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 308
   at NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent
event, IEntityPersister persister, EntityKey keyToLoad, LoadType
options) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default
\DefaultLoadEventListener.cs:line 104
   at
NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent
event, LoadType loadType) in d:\CSharp\NH\NH\nhibernate\src\NHibernate
\Event\Default\DefaultLoadEventListener.cs:line 69
   at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType
loadType) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl
\SessionImpl.cs:line 2468
   at NHibernate.Impl.SessionImpl.ImmediateLoad(String entityName,
Object id) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl
\SessionImpl.cs:line 1356
   at NHibernate.Proxy.AbstractLazyInitializer.Initialize() in d:
\CSharp\NH\NH\nhibernate\src\NHibernate\Proxy
\AbstractLazyInitializer.cs:line 125
   at NHibernate.ByteCode.Castle.LazyInitializer.Intercept(IInvocation
invocation) in d:\CSharp\NH\NH\nhibernate\src
\NHibernate.ByteCode.Castle\LazyInitializer.cs:line 61
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.GuestListProxy.get_InvitedParties()

Here is a section of the class with mapped attributes:

    [Class(Schema = "dbo", Name =
"TheKnot.Tools.GuestListManager.GuestList,
TheKnot.Tools.GuestListManager")]
    [Cache(1, Usage = CacheUsage.ReadWrite)]
    public class GuestList : GuestListManagerBase<GuestList>
    {
        [Id(0, Name = "GuestListId", TypeType = typeof(int), Column =
"GuestListId")]
        [Generator(1, Class = "native")]
        public virtual int GuestListId
        {
            get { return Id; }
            set { Id = value; }
        }

        [Property(Length = 100)]
        public virtual string MemberId { get; set; }

        [Property]
        public virtual int SiteId { get; set; }

        [Property(Length = 50)]
        public virtual string EventName { get; set; }

        [Property(Length = 1000)]
        protected virtual string EventDescription { get; set; }

        [Property(TypeType = typeof(EventType))]
        public virtual EventType EventType { get; set; }

        [Property(Column = "EventDate")]
        public virtual DateTime? NullEventDate { get; set; }

        [Property(Column = "MigratedDate")]
        public virtual DateTime? NullMigratedDate { get; set; }

        public virtual int NumberAccepted { get { return
InvitedParties.Sum(d => d.NumberAccepted); } }
        public virtual int NumberInvited { get { return
InvitedParties.Sum(d => d.NumberInvited); } }
        public virtual int NumberNoResponse { get { return
InvitedParties.Sum(d => d.NumberNoResponse); } }
        public virtual int NumberDeclined { get { return
InvitedParties.Sum(d => d.NumberDeclined); } }

        /// <summary>
        /// Option Lists are Lists of Lists of options within an
invitation, like "What do you want for Dinner?"
        /// </summary>
        [Bag(0, Cascade = "all", Inverse = true, Fetch =
CollectionFetchMode.Subselect)]
        [Key(1, Column = "GuestListId")]
        [OneToMany(3, ClassType = typeof(OptionList))]
        public virtual IEnumerable<OptionList> OptionLists { get;
protected internal set; }

        /// <summary>
        /// Retrieves a list of InvitedParty that have been invited to
this event
        /// </summary>
        [Bag(0, Cascade = "all-delete-orphan", Inverse = true, Fetch =
CollectionFetchMode.Subselect)]
        [Key(1, Column = "GuestListId")]
        [OneToMany(3, ClassType = typeof(InvitedParty))]
        public virtual IList<InvitedParty> InvitedParties { get;
protected internal set; }

        /// <summary>
        /// Retrieves a list of available seating charts for this
guest list
        /// </summary>
        [Bag(0, Cascade = "all", Inverse = true, Fetch =
CollectionFetchMode.Subselect)]
        [Key(1, Column = "GuestListId")]
        [OneToMany(3, ClassType = typeof(SeatingChart))]
        public virtual IEnumerable<SeatingChart> SeatingCharts { get;
protected internal set; }

        [Property(TypeType =
typeof(GenericEnumMapper<TrackMealOptionType>), Length = 50)]
        public virtual TrackMealOptionType TrackMealOption { get;
set; }

        [Property]
        public virtual int Rank { get; set; }

        public GuestList()
        {
            InvitedParties = new List<InvitedParty>();
            OptionLists = new List<OptionList>();
            SeatingCharts = new List<SeatingChart>();
        }

-- 
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