Le mappage d'un DTO une Entité avec Automapper

J'ai une Entité Cadre POCO avec la structure suivante.

public class Entity
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

J'ai créé un Objet de Transfert de Données pour cette entité à être utilisé par mon point de vue.

public class EntityDto
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Maintenant, j'ai le texte suivant du code de mappage dans mon Global.asax fichier.

Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<EntityDto, Entity>(); //not sure whether I need this as well?

Tout fonctionne bien, je passe la DTO de mon point de vue sur OK et je peux créer une nouvelle instance de Entity de mon EntityDto modèle. Le problème se pose lorsque j'essaie de modifier mon Entity; je suis conscient de ce qui est en bas à AutoMapper perdre de l'Entité Clé EF crée pour suivre les modifications apportées à l'objet, mais après avoir lu quelques sources il ne semble pas être une solution définitive. Ici est l'action que j'utilise pour modifier mon entité.

public ActionResult EditEntity(EntityDto model)
{
    var entity = context.Entities.Single(e => e.Id == model.Id);
    entity = Mapper.Map<EntityDto, Entity>(model); //this loses the Entity Key stuff
    context.SaveChanges();

    return View(model);
}

Maintenant, que dois-je faire pour résoudre ce problème? Puis-Je:

  1. En quelque sorte dire AutoMapper à .Ignore() l'Entité propriétés de Clé?
  2. Obtenir AutoMapper pour la copie de l'Entité propriétés de Clé?
  3. .Attach() mon mappé Entity et de définir l'état de modifié?

Toute aide toujours apprécié.

OriginalL'auteur Paul Aldred-Bann | 2012-10-31