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