C# 更新现有父记录时未创建子记录
我是论坛和C#的新手,请原谅我的误解!无论如何,自从将我们的产品升级到.net core 3.0之后,我们在更新和现有父记录时创建子记录时遇到了一些问题。在update调用之前,子对象在父对象上可见,但是在以下情况下,我会得到异常: 发生了一个或多个错误。(数据库操作预期会影响1 行,但实际影响了0行。数据可能已被修改或删除 已删除,因为已加载实体 如果在运行update命令之前在db中手动创建子记录,则子记录将更新,父记录将更新。请参阅下面的更新代码:C# 更新现有父记录时未创建子记录,c#,ef-core-3.0,C#,Ef Core 3.0,我是论坛和C#的新手,请原谅我的误解!无论如何,自从将我们的产品升级到.net core 3.0之后,我们在更新和现有父记录时创建子记录时遇到了一些问题。在update调用之前,子对象在父对象上可见,但是在以下情况下,我会得到异常: 发生了一个或多个错误。(数据库操作预期会影响1 行,但实际影响了0行。数据可能已被修改或删除 已删除,因为已加载实体 如果在运行update命令之前在db中手动创建子记录,则子记录将更新,父记录将更新。请参阅下面的更新代码: public async Task Up
public async Task UpdateAsync(T entity)
{
_context.Entry(entity).State = EntityState.Modified;
await _context.SaveChangesAsync();
}
这个例外是由于什么原因造成的
更新父记录时,我需要更改哪些内容才能创建子记录?该异常是由于更改跟踪出现问题造成的。通常,您不应该将通过post创建的实体添加到上下文中,尤其是对于更新。从数据库中提取现有实体,然后将发布的值映射到上面。嘿@ChrisPratt,谢谢你的评论。我不确定你所说的post是什么意思,UpdateAsync是存储库类中的一个调用。我确实调整了我的代码,先创建了两个对象,然后调用
public async Task AddAsync(T entity){u context.Set().Add(entity);wait _context.saveChangesSync();返回实体;}
这确实创建了父项和子项。但是我确实需要将调用作为一个更新。在更新父项以拥有上面代码中提到的新子项时,3.0和更改跟踪是否有问题?您从哪个版本更新?我发现这似乎是一个突破性的更改。