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à ...

È stato utile?

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
scroll top