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

Pat*_*ins 3 .net c# entity entity-framework 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Update Workout
SET name ..
WHERE id = 1
AND idUser = 123;
Run Code Online (Sandbox Code Playgroud)

我想让实体框架生成此SQL查询。为idUser使用“ AND”子句。

可以吗?

Lad*_*nka 5

EF不提供开箱即用的功能来向Update语句添加where条件。例如,您可以使用此开源项目中的批处理更新。不同之处在于您的更新将不会成为SaveChanges通话的一部分(因为EF不支持该更新)。