¿Cómo obtengo el tipo de entidad en un objeto que puede ser un objeto proxy de NHibernate?

Tengo una clase baseDomainObject para todos mis objetos comerciales que estoy usando con NHibernate. Contiene elId propiedad.

public abstract class DomainObject
{
    public virtual int Id { get; private set; }
}

Me gustaria escribir unIEqualityComparer para comparar mis objetos de dominio. Si dos objetos tienen el mismoId y son el mismo tipo de objeto, deberían ser iguales. Sin embargo cuando usoGetType() para obtener el tipo de objeto, devolverá el tipo de proxy NHibernate. Entonces este código:

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);
}

No funciona correctamente, porque el tipo dex is Asset pero el tipo dey is AssetProxy21879bba3e9e47edbbdc2a546445c657.

Entonces, ¿cómo obtengo el tipo de entidad en un objeto que puede ser un objeto proxy NHibernate? es decir, en el ejemplo anteriorAsset en lugar deAssetProxy21879bba3e9e47edbbdc2a546445c657?

Respuestas a la pregunta(4)

Su respuesta a la pregunta