2013-03-21 5 views
2

Я использую FilteredSet, чтобы автоматически получать данные от текущего пользователя, зарегистрированного в системе. Он предоставляет мне динамический способ возврата данных от текущего пользователя и не доступа к другим данным пользователей.Код элемента Entity Framework Первое обновление с предложением 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 является не только основным ключом объекта, но и идентификатором пользователя.

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

Этот SQL-запрос - это то, что я хотел бы создать Entity Framework для генерации. С предложением «И» для idUser.

Возможно ли это?

+1

Есть ли причина, по которой вы не просто используете метод расширения Wow LINQ? например: entity.Where (x => x.id == 1 && x.idUser == 123) – Justin

+0

Да, это требует, чтобы каждый разработчик добавил это условие. Если кто-то забудет, это может быть опасно. Вот почему, динамический способ сделать это интересен, потому что если вы установите для меня сущность, которую я «помечен», чтобы «владеть» пользователем, что она заставит каждый доступ быть привязанным к текущему зарегистрированному пользователю. Вот несколько объяснений: http://patrickdesjardins.com/blog/using-a-filtereddbset-with-entity-framework-to-have-dynamic-filtering –

+0

Также невозможно добавить предложение Where в обновлении ... –

ответ

4

EF не предоставляет функциональные возможности, необходимые для добавления условий для операторов обновления. Вы можете использовать, например, batch update из этого проекта с открытым исходным кодом. Разница в том, что ваше обновление не будет частью вызова SaveChanges (потому что EF его не поддерживает).

+0

Проект с открытым исходным кодом выглядит великолепно! –

Смежные вопросы