带有AutoMapper的通用工作单元和存储库模式引发异常“相同类型的另一个实体已经具有相同的主键值”

广告牌

我正在将以下GitHub项目用于通用存储库和UoW模式

https://genericunitofworkandrepositories.codeplex.com/

    [HttpPost]
    [Route("update")]
    public HttpResponseMessage Update(HttpRequestMessage request, ComponentViewModel component)
    {
        return CreateHttpResponse(request, () =>
        {
            HttpResponseMessage response = null;

            if (!ModelState.IsValid)
            {
                response = request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }
            else
            {
                var componentDb = UnitOfWork.Repository<Component>().Find(component.ID);

                if (componentDb == null)
                    response = request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid component.");
                else
                {
                    componentDb = Mapper.Map<ComponentViewModel, Component>(component);
                    UnitOfWork.Repository<Component>().Update(componentDb); // <-- ERROR'S HERE

                    UnitOfWork.SaveChanges();
                    response = request.CreateResponse<ComponentViewModel>(HttpStatusCode.OK, component);
                }
            }

            return response;
        });
    }

我在获得以下异常 UnitOfWork.Repository<Component>().Update(componentDb);

附加类型为“组件”的实体失败,因为相同类型的另一个实体已经具有相同的主键值

我相信这是由于之前的AutoMapper Mapper.Map代码引起的,但是,我不确定如何更正该错误。

请告知如何更正用法。

八叶球菌

那是因为您正在使用Find方法。此方法将把返回的实体附加到您的上下文,稍后使用Automapper创建断开连接的POCO实体,稍后再尝试使用Update通用存储库的方法将其附加到您的上下文,并且这两个实体共享相同的Id使用Any扩展方法而不是Find检查表中是否存在与该实体相关的实体Id

 if (UnitOfWork.Repository<Component>().Any(c=>c.Id==component.ID))// Call Any here
 {
       componentDb = Mapper.Map<ComponentViewModel, Component>(component);
       UnitOfWork.Repository<Component>().Update(componentDb); 
       UnitOfWork.SaveChanges();
       response = request.CreateResponse<ComponentViewModel>(HttpStatusCode.OK, component);
 }
 else
 {
      response = request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid component.");
 }  

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档