Tive um problema com o NHibernate e suas classes proxy que me levou um bom pedaço da tarde.
Ocorre que eu tenho uma classe “Pessoa” e suas filhas “Fisica” e Juridica”. O que eu queria era listar todas as pessoas, e quando uma fosse escolhida eu tinha que fazer uma ação baseada no seu tipo. Normal.
O problema é que minha consulta retornava objetos “CProxyTypePessoa_NHibernate_ProxyINHibernateProxy_System_Runtime_SerializationISerializable2.“
Essa classe herda de “Pessoa”, mas se eu tento fazer o cast pra “Fisica” ou “Juridica” – ban! Exceção.
Depois de fuçar um bucado, achei a solução pra Java:
if (obj instanceof HibernateProxy) {
obj = ((HibernateProxy)obj).getHibernateLazyInitializer().getImplementation();
}
Em .net, ficou quase igual:
if (obj is INHibernateProxy)
{
obj = (Pessoa)NHibernateProxyHelper.GetLazyInitializer(obj as INHibernateProxy).GetImplementation();
}
Bem trivial, mas eu perdi um bom tempo pra achar isso.
ps. Usei a extensão Reflector, pro Visual Studio. Um class browser bem bacana.






