使用Automapper后保存Asp.Net核心Ef实体时出错

时间:2016-09-01 09:11:23

标签: asp.net-core automapper entity-framework-core

我有一个带有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'的实例,因为   另一个具有相同密钥的此类实例已经存在   跟踪。添加新实体时,对于大多数键类型都是唯一的   如果没有设置密钥,则将创建临时密钥值(即,如果密钥   属性被指定为其类型的默认值)。如果你是   明确设置新实体的关键值,确保不这样做   与现有实体或为其他实体生成的临时值发生冲突   新实体。附加现有实体时,请确保只有一个实体   具有给定键值的实体实例附加到上下文。

如何避免此错误消息并将数据从视图模型映射到现有对象?

0 个答案:

没有答案