Не удалось подключить объект типа '', поскольку другой объект того же типа уже имеет такое же значение первичного ключа
Я получил ошибку в моем проекте.
[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;
}
Сначала я призываю модель, потом делаю, но я получаю процесс исправления ошибок.
заранее спасибо
2 ответа
Кажется, что сущность, которую вы пытаетесь изменить, не отслеживается правильно и поэтому не распознается как отредактированная, а вместо этого добавляется.
Вместо прямой установки состояния, вы можете попробовать отсоединить и повторно присоединить:
//_context.Entry(entityToUpdate).State = EntityState.Modified;
_context.Entry(entityToUpdate).State = EntityState.Detached;
_context.entityToUpdate.Attach(entityToUpdate);
Это происходит, когда вы выполняете действие, которое приведет к тому, что в контексте EF будет отслеживаться два экземпляра одного и того же объекта.
Например, скажем, EF уже знает о Customer
сущность с CustomerId
= 8. Теперь, если вы выполните какое-либо действие, которое, по сути, скажет EF: "Вот Клиент, CustomerId равен 8 - я хочу, чтобы вы отследили его для меня", EF не сможет сделать это за вас.