为了账号安全,请及时绑定邮箱和手机立即绑定

EF Core-插入然后更新条目

EF Core-插入然后更新条目

C#
跃然一笑 2021-04-27 17:22:36
在WebApi方法中,如果某个元素不存在,我需要将其插入,并在进行几次操作后对其进行更新。代码如下:Entry existingEntry = await _repo.GetEntryByIdAsync(id);existingEntry = await _repo.AddNewEntryAsync(existingAccred);// Some code...// UpdateexistingAccred.IdField = myField;await _repo.UpdateEntryAsync(existingEntry);仓库如下:    public async Task<Entry> GetEntryByIdAsync(int myId)    {        var result = from entry in _ctx.Set<DALENTRY>()            where entry.ID == myId            select new Entry            {                ID = entry.IdEntry,            };        return await result.AsNoTracking().FirstOrDefaultAsync();    }    public async Task<Entry> AddNewEntryAsync(Entry newEntry)    {        DALENTRY entry = new DALENTRY()        {            GUID = newEntry.GUID,        };        _ctx.Add(entry);        await _ctx.SaveChangesAsync();        newEntry.IdEntry = entry.ID;        return newEntry;    }    public async Task<Entry> UpdateEntryAsync(Entry updateEntry)    {        DALENTRY entry = new DALENTRY()        {            ID = updateEntry.IdEntry,            FIELD= updateEntry.IdField,        };        _ctx.Update(entry);        await _ctx.SaveChangesAsync();        return updateEntry;    }但是,当我执行更新时,出现以下错误:处理请求时发生未处理的异常。InvalidOperationException:无法跟踪实体类型“ DALENTRY”的实例,因为已经跟踪了另一个具有相同键值的{'ID'}实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用'DbContextOptionsBuilder.EnableSensitiveDataLogging'来查看冲突的键值。Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap.Add(TKey键,InternalEntityEntry条目)该仓库被注册为Transient,如:services.AddTransient<EntryRepository>();我尝试在插入后使用Detach,但是使用它更新会清除所有未更新的字段。我不记得是什么引起了这个问题。
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

通过先阅读条目,然后对其进行更新,解决了在仓库中更改我的更新策略的问题:


public async Task<Entry> UpdateEntryAsync(Entry updateEntry)

{

    DALENTRY entry = await _ctx.Set<DALENTRY >().SingleOrDefaultAsync(a => a.ID == updateEntry.IdEntry);


    entry.FIELD= updateEntry.IdField,


    _ctx.Update(entry);

    await _ctx.SaveChangesAsync();


    return updateEntry;

}


查看完整回答
反对 回复 2021-05-29
  • 1 回答
  • 0 关注
  • 323 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信