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

EFCore:简单属性更新期间的实体关联错误

EFCore:简单属性更新期间的实体关联错误

C#
MYYA 2021-10-31 11:02:42
我想在我的控制器中设置一个 bool 属性并将其保存到数据库中。EF 会引发有关其他甚至未修改的属性的错误。实体“User”和“RequestDetail”与键值为“System.InvalidOperationException”之间的关联:实体“User”和“RequestDetail”与键值为“{Id: 40}”之间的关联已被切断,但关系是标记为“必需”或隐式必需,因为外键不可为空。如果在切断所需关系时应删除依赖/子实体,则将关系设置为使用级联删除。如果我用一个附加参数调用我的方法,它必须更改一个 RequestDetail 记录的 RequestSent 属性,这很好用。但是在没有此附加参数的情况下调用该方法必须更改多个 RequestDetail 记录上的此属性。这就是它抛出错误的地方。我不会修改与用户相关的任何内容。如果它必须一次做更多的记录,它会抛出这个错误。即使我使用 FirstOrDefaults() 和立即 SaveChanges() 将 foreach 重写为一段时间,它也会在第二轮引发错误。我的方法:var head = await _ctx.RequestHeads.FirstOrDefaultAsync(x=>x.Id == d.Id);if (!d.DetailId.HasValue) {            var details = _ctx.RequestDetails.Include(x=>x.BuyerUser)                            .Where(x=>x.RequestHeadId == head.Id); //not working, always throws an error if it has to modify more than one record            await details.ForEachAsync(detail => {                detail.RequestSent = true;            });        } else {            var detail = head.Details.FirstOrDefault(x=>x.Id == d.DetailId.Value); //works ok, always            detail.RequestSent = true;        }        await _ctx.SaveChangesAsync();
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

解决方案是将 RequestDetail<=>User 关系从 WithOne() 更改为 WithMany()。尽管错误消息有些误导,@IvanStoev 的可能解释如下:

我猜一对一的代码需要单条记录,所以当第二条具有相同 FK 的记录进来时,他们感到困惑并决定删除该记录


查看完整回答
反对 回复 2021-10-31
  • 1 回答
  • 0 关注
  • 254 浏览

添加回答

举报

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