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
?