J'ai les classes suivantes. Les modèles de domaine sont créés par framework d'entité et j'utilise POCO.Mappage d'objets complexes AutoMapper - mappage d'une liste
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedDate{ get; set; }
public DateTime ModifiedDate{ get; set; }
public virtual ICollection<Order> Orders{ get; set; }
}
public class CustomerDTO
{
public int Id { get; set; }
public string Name{ get; set; }
public List<OrderDTO> Orders{ get; set; }
}
public class Order
{
public int Id { get; set; }
public string Name { get; set; }
public int ProductId { get; set; }
public DateTime CreatedDate{ get; set; }
public DateTime ModifiedDate{ get; set; }
}
public class OrderDTO
{
public int Id { get; set; }
public string Name{ get; set; }
}
J'ai essayé les applications suivantes.
Mapper.CreateMap<Customer, CustomerDTO>();
Mapper.CreateMap<CustomerDTO, Customer>();
Mapper.CreateMap<Order, OrderDTO>();
Mapper.CreateMap<OrderDTO, Order>();
J'ai aussi essayé
Mapper.CreateMap<CustomerDTO, Customer>().ForMember(c => c.Orders,
m => m.MapFrom
(
q => Mapper.Map<List<OrderDTO>, ICollection<Order>>(q.Orders)
)
);
Afin de mettre à jour un client i le récupérer à partir de la base de données et mise à jour avec le customerDTO
Customer customer = _customerRepository.GetById(customerDTO.Id);
Mapper.Map<CustomerDTO, Customer>(customerDTO, customer);
L'objet client est mise à jour correctement et la date créée et modifiée ne sont pas modifiées. Mais chaque commande dans la liste des commandes n'est pas mise à jour correctement. Ses dates productId, created et modified sont définies sur la valeur par défaut et non sur les valeurs extraites de la base de données.
Est-ce que je dois faire autre chose parce que Orders est une collection virtuelle?
Je suis nouveau à mapper automatique toute aide appréciée.
EDIT
I ajouté
Mapper.AssertConfigurationIsValid();
reçu l'erreur suivante au démarrage de l'application: membres non mappées ont été trouvés. Passez en revue les types et les membres ci-dessous. Ajouter une expression de mappage personnalisé, ignorer, ajoutez un résolveur personnalisé, ou modifier le type de source/destination
Je mis à jour ma correspondance à:
Mapper.CreateMap<OrderDTO, Order>()
.ForMember(x => x.CreatedDate, y => y.Ignore())
.ForMember(x => x.ModifiedDate, y => y.Ignore())
.ForMember(x => x.ProductId, y => y.Ignore())
Mais l'ordre est d'avoir encore les propriétés ci-dessus écrasés par la par défaut vale
Même problème!Faire le "Map" = la propriété "Id" et "UpdateDate" sera mis à la valeur par défaut au lieu de l'ignorer comme "CreateMap" défini ... Avez-vous trouvé une solution ?? – dataCore