I've been getting this error sometimes and i have no idea why this is
happening.
The project is rather large so i cannot post all the code/mappings
here but what i can do is post the piece of code where the exception
is occurring (if i trust .NET).
Here is Exception + stacktrace:
Exception message:
Exception occurred getter of
Common.Backoffice.Entities.DomainObject.ID
InnerException(s):
Non-static method requires a target.
StackTrace: at
NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object
target)
at
NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object
entity)
at
NHibernate.Persister.Entity.AbstractEntityPersister.GetIdentifier(Object
obj, EntityMode entityMode)
at NHibernate.Type.EntityType.IsEqual(Object x, Object y,
EntityMode entityMode, ISessionFactoryImplementor factory)
at NHibernate.Type.ComponentType.IsEqual(Object x, Object y,
EntityMode entityMode, ISessionFactoryImplementor factory)
at NHibernate.Engine.EntityKey.Equals(Object other)
at System.Collections.Generic.ObjectEqualityComparer`1.Equals(T x,
T y)
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key,
TValue& value)
at NHibernate.Engine.StatefulPersistenceContext.GetEntity(EntityKey
key)
at
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object
entity, Object id, IEntityPersister persister, Boolean
useIdentityColumn, Object anything, IEventSource source, Boolean
requiresImmediateIdAccess)
at
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object
entity, String entityName, Object anything, IEventSource source,
Boolean requiresImmediateIdAccess)
at
NHibernate.Event.Default.DefaultMergeEventListener.EntityIsTransient(MergeEvent
event, IDictionary copyCache)
at
NHibernate.Event.Default.DefaultMergeEventListener.EntityIsDetached(MergeEvent
event, IDictionary copyCache)
at
NHibernate.Event.Default.DefaultMergeEventListener.OnMerge(MergeEvent
event, IDictionary copyCache)
at NHibernate.Impl.SessionImpl.FireMerge(IDictionary copiedAlready,
MergeEvent event)
at NHibernate.Impl.SessionImpl.Merge(String entityName, Object obj,
IDictionary copiedAlready)
at
NHibernate.Engine.CascadingAction.MergeCascadingAction.Cascade(IEventSource
session, Object child, String entityName, Object anything, Boolean
isCascadeDeleteEnabled)
at NHibernate.Engine.Cascade.CascadeToOne(Object child, IType type,
CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled)
at NHibernate.Engine.Cascade.CascadeAssociation(Object child, IType
type, CascadeStyle style, Object anything, Boolean
isCascadeDeleteEnabled)
at NHibernate.Engine.Cascade.CascadeProperty(Object child, IType
type, CascadeStyle style, Object anything, Boolean
isCascadeDeleteEnabled)
at NHibernate.Engine.Cascade.CascadeCollectionElements(Object
child, CollectionType collectionType, CascadeStyle style, IType
elemType, Object anything, Boolean isCascadeDeleteEnabled)
at NHibernate.Engine.Cascade.CascadeCollection(Object child,
CascadeStyle style, Object anything, CollectionType type)
at NHibernate.Engine.Cascade.CascadeAssociation(Object child, IType
type, CascadeStyle style, Object anything, Boolean
isCascadeDeleteEnabled)
at NHibernate.Engine.Cascade.CascadeProperty(Object child, IType
type, CascadeStyle style, Object anything, Boolean
isCascadeDeleteEnabled)
at NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister,
Object parent, Object anything)
at
NHibernate.Event.Default.DefaultMergeEventListener.CascadeOnMerge(IEventSource
source, IEntityPersister persister, Object entity, IDictionary
copyCache)
at
NHibernate.Event.Default.DefaultMergeEventListener.EntityIsDetached(MergeEvent
event, IDictionary copyCache)
at
NHibernate.Event.Default.DefaultMergeEventListener.OnMerge(MergeEvent
event, IDictionary copyCache)
at
NHibernate.Event.Default.DefaultMergeEventListener.OnMerge(MergeEvent
event)
at NHibernate.Impl.SessionImpl.FireMerge(MergeEvent event)
at NHibernate.Impl.SessionImpl.Merge(String entityName, Object obj)
at NHibernate.Impl.SessionImpl.Merge(Object obj)
at DirectPay.Backoffice.Repository.Repository`1.Merge(T entity) in
D:\Projecten\DirectPay\branches\Folkert\solution\Source
\DirectPay.Backoffice.Repository\Repository.cs:line 99
Here is the code of the DomainObject where .NET wants me to look but
somehow i have the feeling the fault does not originate here.
public abstract class DomainObject
{
private int? _id;
/// <summary>
/// Gets or sets the ID.
/// </summary>
/// <value>The ID.</value>
[XmlElement("id")]
public virtual int? ID
{
get { return _id; }
set
{
_id = value;
_oldHashCode = null;
}
}
public override bool Equals(object obj)
{
if(obj == null) return false;
if (!(GetType().IsInstanceOfType(obj))) return false;
return ((DomainObject)obj).ID.Equals(ID);
}
private int? _oldHashCode;
public override int GetHashCode()
{
// Once we have a hash code we'll never change it
if (_oldHashCode.HasValue)
return _oldHashCode.Value;
bool thisIsTransient = Equals(ID, 0);
// When this instance is transient, we use the base
GetHashCode()
// and remember it, so an instance can NEVER change its
hash code.
if (thisIsTransient)
{
_oldHashCode = base.GetHashCode();
return _oldHashCode.Value;
}
return this.ToString().GetHashCode() + ID.GetHashCode();
}
}
I´ve been stuck on this exception for a few days now and i´m
absolutely out of ideas, i´m not even sure which object is causing the
exceptions at this point.
If anyone can point me in the right direction i would be ever so
gratefull.
Greetings,
F.B. ten Kate