然后使用 AutoMapper 更新其内容
这不是真的 -Mapper.Map<MyEntity>(viewModel)
返回类的新实例MyEntity
。它不会更新现有实例的属性。您应该将该新实例附加到上下文:
var entity = Context.MyEntities.Find(id); // this line is useless
entity = Mapper.Map<MyEntity>(viewModel);
Context.MyEntities.Attach(entity);
Context.SaveChanges;
当您创建新实体时,从上下文中检索实体也没有意义。您正在重用相同的变量来保存对不同对象的引用,这令人困惑。真正发生的事情可以这样描述:
var entityFromDb = Context.MyEntities.Find(id);
var competelyNewEntity = Mapper.Map<MyEntity>(viewModel);
Context.MyEntities.Attach(competelyNewEntity);
Context.SaveChanges;
在您的第二个选项中,您正在更新存在于上下文中的实体的属性,您不需要附加它。
顺便说一句,有第三个选项(也是最好的) - 使用另一种映射方法,它会更新目标实体:
var entity = Context.MyEntities.Find(id);
Mapper.Map(viewModel, entity); // use this method for mapping
Context.SaveChanges;