Question

J'essaie de mapper CustomerDTO avec mon entité de domaine ICustomer avec AutoMapper. Tout fonctionne bien pour le premier niveau d’héritage, mais pas pour les autres.

J'utilise des interfaces pour mon modèle de domaine car des types concrets sont injectés par StructureMap à partir de ma couche d'infrastructure de base de données 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; }
}

Maintenant, le mappage AutoMapper

Mapper.CreateMap<CustomerDTO, ICustomer>();

Mapper.CreateMap<ICustomer, CustomerDTO>();

Mapper.AssertConfigurationIsValid();

Maintenant où je me sers de la cartographie

    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;
    }

J'ai un exception de dictionnaire manquant sur le "Id". propriété ...

Était-ce utile?

La solution

Compris!

Le problème était dû au paramètre de définition manquant de "Id". propriété de IBaseEntity.

Après l'avoir changé, tout fonctionne

public interface IBaseEntity<TPk>
{
    TPk Id { get; set; }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top