首页 文章

为什么EF核心datacontext更新外键对象集合?

提问于
浏览
0

以下内容正确更新了“审核”对象,但也更新了具有相同原始值“status”的所有其他审阅对象 .

review=_context.Review.Where(q=>q.id==1).Include(q=>q.Status).SingleOrDefaultAsync();
review.Status.Status1= "approved";

所以id = 1的审核从“待定”中正确更新,但如果它还具有“待定”,则审核时id为2 .

谢谢

1 回答

  • 0

    您正在更新状态记录的Status1属性,而不是为审阅分配不同的状态 .

    例如,假设您有3种状态,“待定”,“已批准”和“已拒绝” . 这将是3个状态记录 . Review具有指向状态记录的状态ID . 您的EF审核实体也有状态参考 .

    鉴于以下记录:

    StatusId:1,Status1:“待定”

    StatusId:2,Status1:“已批准”

    StatusId:3,Status1:“已拒绝”

    您可能拥有状态ID为1的审核记录 . (“待处理”)如果您去审核.Status.Status1 =“已批准”您告诉EF将记录#1的status1文本字段更新为“已批准” . 与StatusID#1相关的每个评论都会显示“已批准” .

    你真正想做的是将评论指向状态ID#2 .

    所以在基础级别,它应该看起来像:

    review.Status = context.Statuses.Single(x => x.Status1 == "Approved");
    

    这告诉EF将该审核与已批准的状态相关联 . 在幕后,EF将做的是将Review记录中的StatusID更新为“2” . 现在有更有效的方法来分配这样的状态,但它应该可以帮助您理解您当前遇到的参考问题 .

相关问题