【问题标题】:ASP.Net MVC Core - The instance of entity type '' cannot be tracked because another instance of this type with the same key is already being trackedASP.Net MVC Core - 无法跟踪实体类型“”的实例,因为已在跟踪具有相同键的此类型的另一个实例
【发布时间】:2017-07-27 03:29:09
【问题描述】:

我是使用 Entity Framework ASP.Net MVC Core 的新手。我习惯于编写存储过程并使用调用它来进行数据操作,例如 CRUD 功能。

这是控制器中的代码

  [HttpPost]
        public IActionResult SaveHeight([FromBody] IEnumerable<VisitVitalSignInfo> height)
        {
            var errMsg = string.Empty;
            var triageId = 0;
            try
            {
                if (ModelState.IsValid)
                {

                        foreach (var item in height)
                        {
                            var heightData = _patient.GetVisitVitalSignInfoById(item.visitVitalSignInfoId);
                            if (heightData.visitVitalSignInfoId == 0)
                            {
                                _patient.AddVisitVitalSignInfo(item);
                               _patient.SaveVisitVitalSignList();
                               triageId = item.triageId;
                        }

                            else
                            {
                                _patient.UpdateVisitVitalSignInfo(item);
                                _patient.SaveVisitVitalSignList();

                        }
                        }



                    //_patient.AddVisitVitalSignInfo(height);
                    //_patient.SaveVisitVitalSignList();
                    //visitVitalSignInfoId = height.visitVitalSignInfoId;
                    ////_clinic.AddClinic(clinic);
                    ////_clinic.SaveClinicList();
                    ////clinicId = clinic.clinicId;
                }
                else
                    errMsg = "Invalid data!";
            }
            catch (Exception ex)
            {
                errMsg = ex.Message;
            }
            return Json(new { errMsg = errMsg, triageId = triageId });
        }

为了集中注意力,正在调用更新功能

_patient.UpdateVisitVitalSignInfo(item);

这里是接口服务

  public interface IPatientService
    {

        void AddVisitVitalSignInfo(VisitVitalSignInfo height);
        void UpdateVisitVitalSignInfo(VisitVitalSignInfo height);
    }
  • 我已经删除了那里的其他声明

这里是主要服务

 public void UpdateVisitVitalSignInfo(VisitVitalSignInfo height)
        {

            _visitVitaSignInfo.Update(height);
        }

通过_patient.UpdateVisitVitalSignInfo(item);后出现错误在控制器中

【问题讨论】:

    标签: c# asp.net asp.net-core-mvc entity-framework-5


    【解决方案1】:

    我以前没有看到过这个错误,但我注意到当您通过 Id 检查实体是否存在时,您将其分配给 heightData 变量。但是,当您尝试进行更新时,您传递的是item 而不是heightData。我过去解决此问题的一种方法是将值从 item 分配给 heightData 并调用

    _patient.UpdateVisitVitalSignInfo(heightData);
    _patient.SaveVisitVitalSignList();
    

    【讨论】:

      【解决方案2】:

      我在这里做了一个小小的猜测,但我假设您正在更新父记录并可能在同一个调用中添加子记录?如果是这样,如果您正在为身份字段添加 PK,则必须先添加子项。否则,它会认为您正在使用同一个实体两次,而不是添加两个新项目。如果你不能这样做,那么你需要在调用 save 之前先将孩子的 PK 设置为 -1、-2 等。如果您有多个级别,那么也需要为他们的孩子更新该 PK 参考。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-19
        • 2022-01-02
        • 2023-01-03
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 1970-01-01
        相关资源
        最近更新 更多