3

我正在使用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”子句。

这可能吗?

4

1 回答 1

5

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

于 2013-03-21T08:44:47.763 回答