Сопоставление DTO с сущностью с помощью Automapper

У меня есть Entity Framework POCO со следующей структурой.

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

Я создал объект передачи данных для этого объекта, который будет использоваться моими представлениями.

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

Теперь у меня есть следующий код сопоставления в моем файле Global.asax.

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

Все работает нормально, я передаю DTO своим представлениям, и я могу создать новый экземпляр Entity из моей EntityDto модели. Проблема возникает, когда я пытаюсь отредактировать свой Entity; Я знаю, что это происходит из-за того, что AutoMapper теряет ключ сущности, который EF создает для отслеживания изменений в объекте, но после прочтения нескольких источников не представляется окончательным решением. Вот действие, которое я использую для редактирования моей сущности.

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

Теперь, что мне сделать, чтобы решить это? Могу ли я:

  1. Каким-то образом указать AutoMapper .Ignore() свойства ключа объекта?
  2. Получить AutoMapper для копирования свойств ключа объекта?
  3. .Attach() my сопоставил Entity и установил измененное состояние?

Любая помощь всегда приветствуется.

8
задан Paul Aldred-Bann 31 October 2012 в 11:04
поделиться