簡體   English   中英

.NET Core 中的更新嘗試引發異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM