Mapowanie DTO do jednostki za pomocą Automapper
Mam POCO Entity Framework o następującej strukturze.
public class Entity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
Stworzyłem obiekt transferu danych, aby ten obiekt mógł być używany przez moje widoki.
public class EntityDto
{
public int Id { get; set; }
public string Name { get; set; }
}
Teraz mam następujący kod odwzorowania w moim pliku Global.asax.
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<EntityDto, Entity>(); // not sure whether I need this as well?
Wszystko działa dobrze, przekazuję DTO do moich widoków OK i mogę utworzyć nową instancjęEntity
od mojegoEntityDto
Model. Problem pojawia się, gdy próbuję edytować mójEntity
; Zdaję sobie sprawę z tego, że to AutoMapper traci klucz Entity, który tworzy EF, aby śledzić zmiany w obiekcie, ale po przejrzeniu kilku źródeł nie wydaje się, aby istniało ostateczne rozwiązanie. Oto działanie, którego używam do edycji mojego obiektu.
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);
}
Co mam teraz zrobić, aby to rozwiązać? Czy mogę:
Jakoś powiedz AutoMapperowi.Ignore()
właściwości klucza encji?Uzyskaj AutoMapper, aby skopiować właściwości klucza jednostki?.Attach()
mój mapowanyEntity
i ustawić stan na zmodyfikowany?Każda pomoc zawsze doceniana.