Mapeando um DTO para uma entidade com o Automapper
Eu tenho um POCO de estrutura de entidades com a estrutura a seguir.
public class Entity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
Eu criei um Objeto de Transferência de Dados para essa entidade a ser usada por minhas visualizações.
public class EntityDto
{
public int Id { get; set; }
public string Name { get; set; }
}
Agora, tenho o seguinte código de mapeamento no meu arquivo Global.asax.
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<EntityDto, Entity>(); // not sure whether I need this as well?
Tudo está funcionando bem, eu passo o DTO para minhas visões OK e posso criar uma nova instância deEntity
do meuEntityDto
modelo. O problema surge quando tento editar meuEntity
; Estou ciente de que isso se deve ao AutoMapper perder a chave de entidade que a EF cria para rastrear as alterações no objeto, mas, depois de ler algumas fontes, não parece haver uma solução definitiva. Aqui está a ação que estou usando para editar minha entidade.
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);
}
Agora, o que eu faço para resolver isso? Eu posso:
De alguma forma, diga ao AutoMapper para.Ignore()
as propriedades da chave de entidade?Obter o AutoMapper para copiar as propriedades da chave de entidade?.Attach()
meu mapeadoEntity
e definir o estado para modificado?Qualquer ajuda sempre apreciada.