为什么EF核心数据上下文更新外键对象集合?

时间:2018-12-09 22:47:01

标签: entity-framework asp.net-core

以下内容可以正确更新“审阅”对象,但也可以更新所有其他具有相同“状态”原始值的审阅对象。

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

因此ID为1的评论已从“待处理”中正确更新 但是如果id = 2也带有“待处理”,则也会进行审核。

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

提供以下记录:

StatusId:1,Status1:“待处理”

StatusId:2,Status1:“已批准”

StatusId:3,Status1:“已拒绝”

您可能拥有状态ID为1的评论记录(“待定”) 如果您查看review.Status.Status1 =“已批准”,则告诉EF将记录#1的status1文本字段更新为“已批准”。与StatusID#1相关的每条评论都会说“已批准”。

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

因此,在基本级别上,它应该类似于:

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

这告诉EF将评论与状态与“已批准”相关联。 EF会在后台执行的操作是将您的Review记录上的StatusID更新为“ 2”。现在有更有效的方式来分配这样的状态,但这应该可以帮助您了解当前遇到的参考问题。