我正在尝试更新特定属性,但前提是用户拥有该实体。
//id of user that submitted the request
var userId = User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value;
_context.MyEntities.Attach(entity);
_context.Entry(entity).Property(e => e.myValue).IsModified = true;
有没有一种方法可以让entity.UserId == userId
在没有先做_context.MyEntities.SingleOrDefaultAsync(i => i.Id == entity.Id)
的情况下使其成为条件(我可以用一个查询而不是两个查询来处理更新/补丁)?或者那是不可能的?
答案 0 :(得分:0)
我们使用EntityFramework.Extended包获得了很好的体验。 它允许您在应用过滤器后仅更新指定的属性 例如:
_context.MyEntities
.Where(e => e.UserId == userId)
.Update(_ => new MyEntity { MyValue = myValue });
_context.SaveChanges();
答案 1 :(得分:0)
您可以添加ConcurrencyCheckAttribute
UserId
属性。
现在EF会在更新时比较此值,如果在数据库中有不同,那么您将收到DbUpdateConcurrencyException
。