实体框架更新属性,单个查询,由所有者限制

时间:2017-05-09 14:50:15

标签: c# asp.net entity-framework

我正在尝试更新特定属性,但前提是用户拥有该实体。

//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)的情况下使其成为条件(我可以用一个查询而不是两个查询来处理更新/补丁)?或者那是不可能的?

2 个答案:

答案 0 :(得分:0)

我们使用EntityFramework.Extended包获得了很好的体验。 它允许您在应用过滤器后仅更新指定的属性 例如:

_context.MyEntities
        .Where(e => e.UserId == userId)
        .Update(_ => new MyEntity { MyValue = myValue });
_context.SaveChanges();

答案 1 :(得分:0)

您可以添加ConcurrencyCheckAttribute UserId属性。

现在EF会在更新时比较此值,如果在数据库中有不同,那么您将收到DbUpdateConcurrencyException