我正在使用FilteredSet从我系统的当前登录用户自动获取数据。它为我提供了一种动态的方式来返回当前用户的数据,而不是访问其他用户的数据。实体框架代码首先使用Where子句更新
我想在更新实体时也这样做。我可以从数据库中使用FilteredSet获取实体,如果实体标识不属于用户抛出异常,但我宁愿不先加载实体,只需附加此实例并进行更新。
到目前为止,我已经尝试:
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查询是我想让Entity Framework生成的。使用idUser的“AND”子句。
这可能吗?
是否有一个原因,你不只是使用.Where LINQ扩展方法?例如:entity.Where(x => x.id == 1 && x.idUser == 123) – Justin 2013-03-21 01:43:30
是的,它需要每个开发者都添加这个条件。如果有人忘记了,这可能是危险的。这就是为什么有一个动态的方法来做到这一点很有趣,因为如果你将你的实体设置为“标记”为由用户“拥有”,它将强制每个访问链接到当前登录的用户。下面是一些解释:http://patrickdesjardins.com/blog/using-a-filtereddbset-with-entity-framework-to-have-dynamic-filtering – 2013-03-21 01:52:55
也不可能在更新中添加Where子句... – 2013-03-21 01:55:31