2014-02-20 5 views
1

Мне нужна помощь, чтобы понять, почему я получаю это сообщение, когда обновляю только поле столбца с сущностью.Обновление одного поля столбца создает ошибку отношения

Операция завершилась неудачно: связь не может быть изменена, поскольку одно или несколько свойств внешнего ключа не имеют значения NULL. Когда происходит изменение отношения, соответствующее свойство внешнего ключа устанавливается равным нулевому значению. Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, для свойства внешнего ключа должно быть назначено другое ненулевое значение, или не связанный с ним объект должен быть удален.

Я никогда не обновляю внешние ключи в своей модели, а только целое поле, которое учитывает представление на странице.

Вот мой код:

// Service 
... 
Tender currentTender = base.GetById(tenderId) 
currentTender.ViewCount = currentTender.ViewCount + 1; 
base.UpdateSpecificFieldsOnly(currentTender, views => views.ViewCount); 

// Repository 
     public bool UpdateSpecificFieldsOnly(TEntity entityToUpdate, params Expression<Func<TEntity, object>>[] includeProperties) 
     { 
      if (entityToUpdate == null) 
      { 
       throw new ArgumentException("Cannot add a null entity."); 
      } 

      try 
      { 
       var id = this.dbSet.Create().GetType().GetProperty("Id").GetValue(entityToUpdate); 

       this.dbSet.Attach(entityToUpdate); 
       foreach (var includeProperty in includeProperties) 
       { 
        context.Entry(entityToUpdate).Property(includeProperty).IsModified = true; 
       } 

       return true; 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
     } 

public virtual bool Save(bool shouldValidateEntity = true) 
     { 
      try 
      { 
       context.Configuration.ValidateOnSaveEnabled = shouldValidateEntity; 
       context.SaveChanges(); 
       return true; 
      } 
     } 

Спасибо за вашу помощь. На этом, я не знаю, с чего начать ..

Карине

ответ

0

Я думаю, что вы очень много переусердствовать. Если я правильно понял, что вы пытаетесь сделать, это должно быть простым:

// replace "EFDbContext" with your EF context class 
using (var context = new EFDbContext()) 
{ 
    // replace "Id" with your primary key column name for tender 
    var currentTender = context.Tenders.Single(t => t.Id == tenderId); 
    currentTender.ViewCount = currentTender.ViewCount + 1; 
    context.SaveChanges(); 
} 
Смежные вопросы