Manejo de objetos nulos con AutoMapper

Estoy usando Automapper para lo siguiente, pero debido a que no hay ningún registro en la tabla de contactos del cliente, obtengo un Referencia a objeto no establecida como instancia de un objeto. error.

Existe una colección de contactos, pero la colección Contacts.ContactEmails es nula.

¿Cuál es la mejor forma de lidiar con esto?

Mapper.CreateMap<Client, ClientGrid>()
..ForMember(to => to.OfficeEmail, opt => opt.MapFrom(from => from.Contacts == null ? "" : from.Contacts.SingleOrDefault().ContactEmails.FirstOrDefault().Email));

preguntado el 03 de mayo de 12 a las 18:05

2 Respuestas

¿Puede modificar la clase de contacto para tener una propiedad get que devuelva el primer correo electrónico de contacto, si está disponible, o nulo de lo contrario? Entonces podría asignar a esa propiedad en su lugar.

contestado el 03 de mayo de 12 a las 18:05

Hay varios correos electrónicos contra cada Conact, además de que es una colección de entidades. - Okenshield

Su código solo mapea el primer correo electrónico de todos modos, ¿tenía la intención de mapear otros? Además, puede agregar una propiedad a los objetos de entidad porque son clases parciales. - Michael Yoon

solía .ConvertUsing<MyTypeConverter>() para resolver este problema:

Mapper.CreateMap<Client, ClientGrid>()
    .ConvertUsing<ClientToClientGridConverter>();


class ClientToClientGridConverter
    : AutoMapper.ITypeConverter<Client, ClientGrid>
{
    public ClientGrid Convert(AutoMapper.ResolutionContext context)
    {
        if (context == null || context.IsSourceValueNull) 
        { 
            return null;
        }

        var client = context.SourceValue as Client;

        var clientGrid = new ClientGrid();

        // conversion rules and logic here

        return clientGrid 
    }
}

Respondido 06 Jul 19, 13:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.