附加类型为 '' 的实体失败,因为相同类型的另一个实体已具有相同的主键值
本文关键字:实体 键值 另一个 类型 失败 因为 同类型 | 更新日期: 2023-09-27 17:56:21
我的项目中出现错误。
[HttpPost]
protected virtual ActionResult Update(T entity)
{
var success = true;
var errorMessages = new List<ErrorMessage>();
try
{
var originalEntity = _genericService.Find(entity.Id);
SetNullToTransientReferences(entity);
if (!errorMessages.Any())
{
_genericService.Update(entity);
//AfterUpdate(entity, originalEntity);
}
else
{
success = false;
}
}
catch (Exception ex)
{
success = false;
//errorMessages.AddRange(ExceptionService.GetErrorMessages(ex));
}
ResolveCircularReferences(entity);
return Json(new
{
Data = entity,
Success = success,
Errors = errorMessages,
}, JsonRequestBehavior.AllowGet);
}
通用存储库更新方法
public virtual void Update(TEntity entityToUpdate)
{
_context.Entry(entityToUpdate).State = EntityState.Modified;
}
首先,我敦促模型然后我正在做,但我得到了一个纠错过程。
提前致谢
当您执行会导致 EF 上下文监视同一实体的两个实例的操作时,会发生这种情况。
例如,假设 EF 已经知道 CustomerId
= 8 的Customer
实体。现在,如果您执行的操作实际上会向 EF 说:"这是一个客户,CustomerId 为 8 - 我希望你为我跟踪它",EF 无法为你执行此操作。
似乎没有正确跟踪您尝试修改的实体,因此未被识别为已编辑,而是添加了。
与其直接设置状态,不如尝试分离并重新附加:
//_context.Entry(entityToUpdate).State = EntityState.Modified;
_context.Entry(entityToUpdate).State = EntityState.Detached;
_context.entityToUpdate.Attach(entityToUpdate);