I have a base class DomainObject
for all my business objects I am using with NHibernate. It contains the Id
property.
public abstract class DomainObject
{
public virtual int Id { get; private set; }
}
I would like to write an IEqualityComparer
to compare my domain objects. If two objects have the same Id
and are the same kind of object they should be equal. However when I use GetType()
to get the type of the object, it will return the NHibernate proxy type. So this code:
bool IEqualityComparer.Equals(object x, object y)
{
// null checking code skipped here
if(x is DomainObject && y is DomainObject)
{
return ((DomainObject) x).Id == ((DomainObject) y).Id
&& x.GetType() == y.GetType();
}
return x.Equals(y);
}
Doesn't work correctly, because the type of x is Asset
but the type of y is AssetProxy21879bba3e9e47edbbdc2a546445c657
.
So, how do I get the entity type on an object that may be a NHibernate proxy object? i.e. in the example above Asset
instead of AssetProxy21879bba3e9e47edbbdc2a546445c657
?