AutoMapper con herencia de tipo genérico
-
22-07-2019 - |
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 ...
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