Pregunta

Estoy tratando de asignar CustomerDTO con mi entidad de dominio ICustomer con AutoMapper. Todo funciona bien para el primer nivel de herencia, pero no para los demás.

Estoy usando interfaces para mi modelo de dominio ya que los tipos concretos son inyectados por StructureMap desde mi capa de infraestructura de base de datos LinqToSql.

public interface IBaseEntity<TPk>
{
    TPk Id { get; }
}

public interface ICustomer : IBaseEntity<int>
{
    string Email { get; set; }
}

[DataContract]
public class CustomerDTO
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Email { get; set; }
}

Ahora la asignación de AutoMapper

Mapper.CreateMap<CustomerDTO, ICustomer>();

Mapper.CreateMap<ICustomer, CustomerDTO>();

Mapper.AssertConfigurationIsValid();

Ahora donde estoy usando el mapeo

    public CreateCustomerServiceResult CreateCustomer(CustomerDTO customer)
    {
        var result = new CreateCustomerServiceResult();
        try
        {
            var originalMapped = Mapper.DynamicMap<CustomerDTO, ICustomer>(customer);

            var newCustomer = _customerService.CreateCustomer(originalMapped);

            var newMapped = Mapper.DynamicMap<ICustomer, CustomerDTO>(newCustomer);

            result.Customer = newMapped;
        }
        catch (Exception ex)
        {

        }
        return result;
    }

Tengo una Excepción clave faltante en el diccionario en el " Id " propiedad ...

¿Fue útil?

Solución

¡Lo tengo!

El problema se debió a la configuración faltante de '' Id '' propiedad de IBaseEntity.

Después de cambiarlo todo funciona

public interface IBaseEntity<TPk>
{
    TPk Id { get; set; }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top