C# Net MVC核心-实体类型'';无法跟踪,因为已跟踪具有相同密钥的此类型的另一个实例
我对使用实体框架ASP.NETMVC核心是一个新手。我习惯于编写存储过程,并将其用于数据操作,如CRUD功能 这是控制器中的代码C# Net MVC核心-实体类型'';无法跟踪,因为已跟踪具有相同密钥的此类型的另一个实例,c#,asp.net,asp.net-core-mvc,entity-framework-5,C#,Asp.net,Asp.net Core Mvc,Entity Framework 5,我对使用实体框架ASP.NETMVC核心是一个新手。我习惯于编写存储过程,并将其用于数据操作,如CRUD功能 这是控制器中的代码 [HttpPost] public IActionResult SaveHeight([FromBody] IEnumerable<VisitVitalSignInfo> height) { var errMsg = string.Empty; var triageId =
[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 });
}
这是接口服务
public interface IPatientService
{
void AddVisitVitalSignInfo(VisitVitalSignInfo height);
void UpdateVisitVitalSignInfo(VisitVitalSignInfo height);
}
- 我已经删除了其他声明
public void UpdateVisitVitalSignInfo(VisitVitalSignInfo height)
{
_visitVitaSignInfo.Update(height);
}
通过_patient.UpdateVisitVitalSignInfo(项目)后出现错误;在控制器中我以前没有看到过此错误,但我注意到,当您通过Id检查实体是否存在时,您将其分配给
heightData
变量。但是,当您尝试执行更新时,您传递的是项目
,而不是高度数据
。我过去解决这个问题的一种方法是将item
中的值分配给heightData
并调用
[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(heightData);
_patient.SaveVisitVitalSignList();
我在这里做一个小小的猜测,但我假设您正在更新一个父记录,并可能在同一个调用中添加子项?如果是这样的话,那么如果您正在使用标识字段的PK进行添加,则必须首先添加子项。否则,它会认为您正在两次使用同一实体,而不是添加两个新项。如果您不能这样做,那么您需要在调用save之前先将孩子的PK设置为-1、-2等。如果您有多个级别,那么也需要为其子级更新PK引用