[英]Update attempt in .NET Core throws exception
我正在開發一個應用程序,我不一定需要使用 .NET 核心身份進行登錄。 但是,每當我嘗試更新記錄時,它都會引發以下異常
無法跟蹤實體類型“StApplications”的實例,因為已經在跟蹤具有相同鍵值 {'ApplicationId'} 的另一個實例。 附加現有實體時,請確保僅附加一個具有給定鍵值的實體實例。 考慮使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”來查看沖突的鍵值。
Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap.ThrowIdentityConflict(InternalEntityEntry 條目)
StApplications
是我要更新記錄的表
以下是我的ApplicationRepository
中的代碼
public async Task<StApplications> UpdateAsync(StApplications obj)
{
var updatedApplication = _context.Update(obj);
await _context.SaveChangesAsync();
return updatedApplication.Entity;
}
接下來是我的ApplicationController
中的代碼,即 POST 方法
public async Task<IActionResult> Biodata(StApplications stApplications)
{
var application = await _ApplicationRepository.GetByIdAsync(stApplications.ApplicationId) ;
if (application == null)
{
return BadRequest(ModelState);
}
var updatedapplication = await _ApplicationRepository.UpdateAsync(stApplications);
return RedirectToAction("Olevel", new { id = updatedapplication.ApplicationId});
}
您必須首先在本地實體中設置Detached
object,然后在新 object 上設置Modified
state。
public virtual async Task UpdateAsync(TEntity entity, CancellationToken cancellationToken, bool saveNow = true)
{
Assert.NotNull(entity, nameof(entity));
AttachEntity(entity);
Entities.Update(entity);
if (saveNow)
await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
}
private void AttachEntity(TEntity entity)
{
var local = Entities.Local.FirstOrDefault(c => c.Id == entity.Id);
if (local != null)
{
DbContext.Entry(local).State = EntityState.Detached;
}
Entities.Attach(entity);
DbContext.Entry(entity).State = EntityState.Modified;
}
您不應該保存stApplications
,而是將其中的值映射到您從數據庫中提取的application
實例上,然后保存application
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.