c# - C# Entity Framework 删除子表(关系)数据并更新父表
问题描述
我正在使用实体框架来更新记录
用户(家长) | 电子邮件(儿童) |
---|---|
用户身份 | 电子邮件ID |
用户名 | 用户身份 |
电子邮件地址 |
在 Child 表中,一个用户有多个电子邮件地址。当用户更新时,删除所有子数据并保存父子数据。我在添加和删除用户数据方面没有任何问题。
请注意,我只有用户表 DbSet 是可访问的。我正在使用其他一些项目 DbContext
Private async Task updateUser(User _user){
var user = _configurationDbContext.Users
.Include(x => x.Emails)
.Where(x => x.UserId == _user.UserId)
.FirstOrDefault();
user.Emails.RemoveAll(x => x.UserId == _user.Id);
_configurationDbContext.Users.Update(_user);
return await _configurationDbContext.SaveChangesAsync();
}
我收到以下错误
InvalidOperationException:无法跟踪实体类型“Users”的实例,因为已经在跟踪具有相同键值 {'UserId'} 的另一个实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”来查看冲突的键值。
我可以知道如何使用Users DbSet来实现这一点吗
解决方案
尝试这个:
var user = _configurationDbContext.Users
.Include(x => x.Emails)
.Where(x => x.UserId == _user.UserId)
.FirstOrDefault();
user.Emails.RemoveAll(x => x.UserId == _user.Id);
// or you can try
user.Emails.Clear();
_configurationDbContext.Entry(user).CurrentValues.SetValues(_user);
return await _configurationDbContext.SaveChangesAsync()
推荐阅读
- javascript - 为什么工具提示动画适用于标签而不适用于输入
- java - 查找firebase的哪个节点被更新
- graphql - 如何让 Gatsby 插件内容可选字段工作?
- pulumi - 通过 pulumi 创建 Fastly Service 时出现 Fastly 400 错误“exceeding_max_backends”
- excel - VBA 从数据透视表中提取数据并放置在单元格中
- python-3.x - Python 在 strong 中查找几个特定的词
- javascript - games.filter 不是函数 || 反应钩子组件不接收数据
- reactjs - 无法在反应中使用 useRef 引用带有输入文件标签的文件
- caddy - 反向代理 - 403 阻止主主机 ip 浏览
- visual-studio-code - 我无法在 VS 代码中安装任何 npm 包,出现以下错误,2021 年 2 月发布的 VS 代码最新版本是否有任何问题?