我有一个带有ef core 1.0和automapper 5.1.1的asp.net核心1应用程序 我从网页上收到一个实体的视图模型,我试图直接映射到ed实体。
在地图的启动中,我声明了这条规则
cfg.CreateMap<AnagraficaVm, Anagrafiche>()
.ForMember( dest => dest.Id, opt => opt.Ignore() );
en实体和viewmodel中的Id是相同的。 在mvc控制器中,我尝试以这种方式映射viewmodel:
var anagrafica = await _db.Anagrafiche.FirstOrDefaultAsync(r => r.Id == id);
if (anagrafica == null) return null;
_mapper.Map(model, anagrafica);
当我拨打SaveChangesAsync
时收到错误消息
无法跟踪实体类型'Anagrafiche'的实例,因为 另一个具有相同密钥的此类实例已经存在 跟踪。添加新实体时,对于大多数键类型都是唯一的 如果没有设置密钥,则将创建临时密钥值(即,如果密钥 属性被指定为其类型的默认值)。如果你是 明确设置新实体的关键值,确保不这样做 与现有实体或为其他实体生成的临时值发生冲突 新实体。附加现有实体时,请确保只有一个实体 具有给定键值的实体实例附加到上下文。
如何避免此错误消息并将数据从视图模型映射到现有对象?