我有一个具有以下结构的实体框架 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);
}
现在,我该怎么做才能解决这个问题?我可以吗:
- 以某种方式告诉 AutoMapper
.Ignore()
实体键属性? - 获取 AutoMapper 以复制实体键属性?
.Attach()
我的映射Entity
并将状态设置为已修改?
任何帮助总是很感激。