实体框架代码首先用Where子句更新

时间:2013-03-21 01:35:29

标签: c# .net entity-framework entity entity-framework-5

我正在使用FilteredSet自动获取系统当前登录用户的数据。它为我提供了一种从当前用户返回数据而不访问其他用户数据的动态方法。

我想在更新实体时也这样做。我可以使用FilteredSet从数据库中获取实体,如果实体id不属于用户抛出异常但我不想先加载实体,只需附加这个实体并更新。

到目前为止,我试过了:

public void UpdateOwnable<TEntity>(TEntity entity) where TEntity : class, IEntity, IUserOwnable
{
       var entityLocal = SetOwnable<TEntity>().Local.SingleOrDefault(d => d.Id == entityId);
       if (entityLocal==null)
       {
          entityLocal = this.SetOwnable<TEntity>().Attach(entity);
       }
       this.ChangeTracker.Entries<TEntity>().Single(d => d.Entity == entityLocal).State = EntityState.Modified;
}

问题是生成的查询不包含WHERE子句。我希望找到一种方式,Where子句不仅是实体的主键,还是用户id。

Update Workout
SET name ..
WHERE id = 1
AND idUser = 123;

这个SQL查询是我想要实体框架生成的。使用idUser的“AND”子句。

这可能吗?

1 个答案:

答案 0 :(得分:4)

EF不提供开箱即用的功能来添加更新语句的条件。您可以在此开源项目中使用示例batch update。不同之处在于您的更新不会成为SaveChanges调用的一部分(因为EF不支持它)。