EF Core单实体属性更新疑问:仅更新指定属性还是覆盖全字段?
EF Core 更新指定属性的行为确认
你这段代码的操作只会更新User实体的AssignedInfo属性,完全不用担心覆盖其他字段,原因如下:
- 当你用
_context.Users.Single(u => u.Id == userId)查询实体时,EF Core会自动跟踪这个实体的状态和所有属性的原始值。 - 你只修改了
user.AssignedInfo这一个属性,EF Core的变更跟踪器只会标记这个属性为"已修改"。 - 调用
SaveChanges()时,EF Core会生成只包含AssignedInfo对应数据库字段的UPDATE语句,其他未修改的字段不会出现在更新语句里,自然不会被覆盖。
举个直观的例子,假设User表有Id、Name、AssignedInfo三个字段,你的代码执行后生成的SQL大概是这样的:
UPDATE [Users] SET [AssignedInfo] = @p0 WHERE [Id] = @p1;
完全不会涉及Name这类未修改的字段,所以其他端点更新的其他字段不会被当前操作覆盖。
内容的提问来源于stack exchange,提问作者devLander
相关产品推荐
相关产品推荐

