Como obtenho o tipo de entidade em um objeto que pode ser um objeto de proxy NHibernate?

Eu tenho uma classe baseDomainObject para todos os meus objetos de negócios que estou usando com o NHibernate. Contém oId propriedade.

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

Eu gostaria de escrever umaIEqualityComparer para comparar meus objetos de domínio. Se dois objetos tiverem o mesmoId e são o mesmo tipo de objeto, eles devem ser iguais. No entanto, quando eu usoGetType() para obter o tipo do objeto, ele retornará o tipo de proxy NHibernate. Portanto, 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);
}

Não funciona corretamente, porque o tipo dex is Asset mas o tipo dey is AssetProxy21879bba3e9e47edbbdc2a546445c657.

Então, como obtenho o tipo de entidade em um objeto que pode ser um objeto proxy NHibernate? ou seja, no exemplo acimaAsset ao invés deAssetProxy21879bba3e9e47edbbdc2a546445c657?

questionAnswers(4)

yourAnswerToTheQuestion