【发布时间】:2013-03-21 01:35:28
【问题描述】:
我正在使用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”子句。
这可能吗?
【问题讨论】:
-
您是否有理由不只是使用 .Where LINQ 扩展方法?例如:entity.Where(x=> x.id == 1 && x.idUser == 123)
-
是的,需要每个开发者都添加这个条件。如果有人忘记了,那可能很危险。这就是为什么,使用动态的方式来做这件事很有趣,因为如果您将您的实体设置为我“标记”为由用户“拥有”,它将强制每次访问都链接到当前登录的用户。这是一些解释:patrickdesjardins.com/blog/…
-
更新中也不能添加 Where 子句...
标签: c# .net entity-framework entity entity-framework-5