jasonsirota
unread,May 16, 2011, 3:11:45 PM5/16/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to nhusers
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>();
}