我是使用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)后出现错误;在控制器中
答案 0 :(得分:0)
之前我没有看到过这个错误但是我注意到当你通过Id检查实体存在时,你将它分配给heightData
变量。但是,当您尝试进行更新时,您传递的是item
而不是heightData
。我过去修正此问题的一种方法是将值从item
分配到heightData
并调用
_patient.UpdateVisitVitalSignInfo(heightData);
_patient.SaveVisitVitalSignList();
答案 1 :(得分:0)
我在这里做了一个小小的猜测,但我假设您正在更新父记录并可能在同一个电话中添加孩子?如果是这样,如果您正在为标识字段添加PK,则必须先添加子项。否则,它会认为您正在使用同一个实体两次,而不是添加两个新项目。如果你不能这样做,那么你需要先将孩子的PK设置为-1,-2等,然后再调用save。如果你有多个级别,那么也需要为他们的孩子更新PK参考。