Сопоставление 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 теряет Entity Key, который 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);
}
Теперь, что мне сделать, чтобы решить это? Могу я:
Как-то сказать AutoMapper, чтобы.Ignore()
свойства Entity Key?Получить AutoMapper, чтобы скопировать свойства Entity Key?.Attach()
мой картированныйEntity
и установить состояние на изменение?Любая помощь всегда ценится.