C# EF核心相同表两个操作(删除项和更新剩余项)

C# EF核心相同表两个操作(删除项和更新剩余项),c#,.net-core,entity-framework-core,ef-core-3.1,C#,.net Core,Entity Framework Core,Ef Core 3.1,我有一个奇怪的情况 我有一个列表,我需要从数据库中删除一个项目,然后所有剩余的项目我只需要增加和更新它们 我在列表筛选中使用.AsNoTracking(),但我无法执行上述操作。 一直告诉我” “实体类型“列表”上的属性“ListNumber”是键的一部分,因此无法修改或标记为已修改。要使用标识外键更改现有实体的主体,请先删除依赖项并调用“SaveChanges”,然后将依赖项与新主体关联。” 我还尝试构建1个方法来删除剩余的项,1个方法来更新剩余的项,并从控制器调用它们(第一个是删除,第二个是

我有一个奇怪的情况

我有一个列表,我需要从数据库中删除一个项目,然后所有剩余的项目我只需要增加和更新它们

我在列表筛选中使用.AsNoTracking(),但我无法执行上述操作。 一直告诉我” “实体类型“列表”上的属性“ListNumber”是键的一部分,因此无法修改或标记为已修改。要使用标识外键更改现有实体的主体,请先删除依赖项并调用“SaveChanges”,然后将依赖项与新主体关联。”

我还尝试构建1个方法来删除剩余的项,1个方法来更新剩余的项,并从控制器调用它们(第一个是删除,第二个是更新),但结果相同

任何人都可以帮助我,因为我被困住了。我非常希望能有一个清晰的例子或方法来说明我如何处理上述情况

先谢谢你

这就是我从控制器调用方法的方式

await _repo.RemoveFromList("1234", "1");
await _repo.ResetList("1234");
下面是我正在使用的方法,删除一个可以工作,但当我使用重置列表时,我得到了一个异常

public async Task RemoveFromList(string listNumber, string listItem)
        {
            try
            {
                var entity = await _context.LIST.Where(x => x.ListNumber == listNumber && x.ListItem == listItem).FirstOrDefaultAsync();
                _context.LIST.Remove(entity);
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                throw;
            }
        }

public async Task ResetList(string listNumber)
        {
            try
            {
                var entities = await _context.LIST.AsQueryable().Where(x => ListNumber== listNumber).ToListAsync();
                var startFrom = 1;
                foreach (var en in entities)
                {
                    en.NewListNumber = startFrom.ToString().PadLeft(3, '0');
                    startFrom++;
                    _context.LIST.Update(en);
                }

                await _context.SaveChangesAsync();

            }
            catch (Exception ex)
            {
                throw;
            }
        }

因为您使用的是AsNoTracking()问题可能是您尝试更新的对象已分离,因此EF无法跟踪这些对象上的更改。问题是您是否需要使用AsNoTracking?。可能您想检查此答案,原因可能有很多,请从您的implementatrion@Juan我已经更新了代码,请看一下。谢谢我n advance.@E-Bat完成,请参见上文为什么使用AsNoTracking()?尝试删除AsNoTracking,或者如果有必要使用它,将实体附加为已修改和已删除。因为您使用的是AsNoTracking()问题可能是您尝试更新的对象已分离,因此EF无法跟踪这些对象上的更改。问题是您是否需要使用AsNoTracking?。可能您想检查此答案,原因可能有很多,请从您的implementatrion@Juan我已经更新了代码,请看一下。谢谢我n advance.@E-Bat完成,请参见上文为什么使用AsNoTracking()?尝试删除AsNoTracking,或者如果有必要使用它,将实体附加为已修改和已删除。