2009-12-01 3 views
3

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 les types de béton sont injectés par StructureMap depuis ma couche Infrastructure de base de données LinqToSql.AutoMapper avec héritage de type générique

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, la mise en correspondance AutoMapper

Mapper.CreateMap<CustomerDTO, ICustomer>(); 

Mapper.CreateMap<ICustomer, CustomerDTO>(); 

Mapper.AssertConfigurationIsValid(); 

Maintenant où j'utilise 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 Dictionnary manquant Exception clé sur la propriété "Id" ...

Répondre

1

Got It!

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

Après l'avoir modifié tout fonctionne

public interface IBaseEntity<TPk> 
{ 
    TPk Id { get; set; } 
} 
+0

Une autre chose - pas besoin de faire « DynamicMap » - qui est réservé aux cas où vous ne connaissez pas le type à la compilation. Utilisez simplement Mapper.Map à la place. –

Questions connexes