Se utilizzate AutoMapper per creare Dto da oggetti letti con Nhibernate e lazy-loading attivo, è possibile che otteniate un’eccezione di tipo ObjectDisposedException, in quanto Automapper accede a proprietà “Lazy”, ma la sessione è già stata chiusa e distrutta.
Per risolverlo, basta implementare un Custom Resolver, che tornerà null qualora il tipo della proprietà che sto provando a mappare sia un proxy non inizializzato.
Ecco quindi il codice:
- public class NhProxyResolver : ValueResolver<object, object>
- {
- protected override object ResolveCore(object source)
- {
- return NHibernateUtil.IsInitialized(source) ? source : null;
- }
- }
ed un esempio della configurazione di AutoMapper:
- Mapper.CreateMap<User, UserDto>()
- .ForMember(x => x.Orders, opt => opt.ResolveUsing<NhProxyResolver>().FromMember(z => z.Orders));