我有一个以下结构的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传递到我的视图并从我的EntityDto模型创建一个新的Entity实例。但是当我尝试编辑Entity时出现问题。我知道这是因为AutoMapper丢失了EF创建用于跟踪对象更改的Entity Key,但是在阅读了几个来源之后,似乎没有明确的解决方案。这是我用来编辑实体的操作。
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忽略实体键属性吗?
- 让AutoMapper复制实体键属性吗?
- 使用
.Attach()
将映射的Entity
附加并将状态设置为修改?
非常感谢任何帮助。
Entity
时,它不再是普通的 POCO,所以 AutoMapper 不知道该怎么做。 - Paul Aldred-BannEntity
只是一个POCO,所以它不包含在检索时EF创建的任何额外实体信息,所以我无法告诉AutoMapper忽略它们。 - Paul Aldred-Bann