AutoMapper con ereditarietà di tipo generico
-
22-07-2019 - |
Domanda
Sto cercando di mappare CustomerDTO con la mia entità di dominio ICustomer con AutoMapper. Tutto funziona bene per il primo livello di eredità, ma non per gli altri.
Sto usando le interfacce per il mio modello di dominio poiché i tipi concreti vengono iniettati da StructureMap dal mio livello di infrastruttura di database 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; }
}
Ora la mappatura di AutoMapper
Mapper.CreateMap<CustomerDTO, ICustomer>();
Mapper.CreateMap<ICustomer, CustomerDTO>();
Mapper.AssertConfigurationIsValid();
Ora dove sto usando la mappatura
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;
}
Ho un'eccezione chiave Dictionnary mancante su " Id " proprietà ...
Soluzione
Capito!
Il problema era dovuto al setter mancante di " Id " proprietà di IBaseEntity.
Dopo averlo cambiato tutto funziona
public interface IBaseEntity<TPk>
{
TPk Id { get; set; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow