2013-09-19 2 views
2

У меня возникает проблема, вызывающая раздражение, когда один столбец paticular в моей сущности не будет сохранять/обновлять. Я пробовал множество методов обновления строки, например, присвоение каждого свойства, которое я хочу обновить вручную, туда, где я сейчас (см. Блок кода ниже). 2 столбца обновляют и сохраняют как ожидалось (absent_type_id и point_value), однако независимо от того, что я делаю, столбец «описание» просто не будет сохранен.MVC4 Entity Framework один столбец paticular, не обновляющийся

Я проверил отладчик, чтобы узнать, что это значение перед db.SaveChanges(); и подтвердил, что он настроен на новое значение; однако выбор строки после сохранения (и проверка базы данных) показывает, что другие значения обновляются, но описание возвращается к тому, что было ... почему это может быть?

[HttpPost] 
    public JsonResult UpdateOccurrence(int occ_id, 
             string absent_type, 
             string description, 
             int point_value) 
    { 
     try 
     { 
      // Get id for the absent type 
      int absent_type_id = db.AT_absent_types.Single(a => a.absent_type == absent_type).absent_type_id; 

      var occurrenceToUpdate = new AT_occurrences 
      { 
       occ_id = occ_id, 
       absent_type_id = absent_type_id, 
       description = description, 
       point_value = point_value 
      }; 

      db.AT_occurrences.Attach(occurrenceToUpdate); 

      db.SaveChanges(); 

      //return call omitted 
     } 
     catch (Exception ex) 
     { 
      return Json(new {Result = "ERROR", Message = ex.Message}); 
     } 
    } 

Как я уже говорил - проводка point_value и absent_type сохранить и обновить объект идеально, описание просто не будет сохранять! Понятия не имею почему. Любая помощь или понимание были бы очень оценены - это сводит меня с ума! Ура!

ответ

0

Вы используете «Attach» для присоединения отключенного свойства к контексту. Я понимаю, что Entity Framework не знает, что изменяемые свойства отличаются от свойств в БД. Поэтому вы должны явно указать EF, что вы изменили свойство. Как это:

db.Entry(occurenceToUpdate).Property(o=>o.occ_id).IsModified = true; 

или как это:

db.Entry(occurenceToUpdate).Property("occ_id").IsModified = true; 

Вам придется повторить для каждого свойства вы устанавливаете.

Я точно знаю вышеуказанные работы, но вы также можете попробовать следующее. Если вы устанавливаете все свойства объекта сущности, проверить, если что-то вроде это работает:

db.Entry(occurenceToUpdate).State = EntityState.Modified. 
+0

Спасибо за разрешение SashaArz. Я добавил строки, как вы предложили. Однако он ничего не сделал. Если я отправляю методу новый тип, описание и значение точки - тип и значение точки обновляются как в таблице, но в описании нет. как это может быть! –

+0

Было ли поле описания добавлено в таблицу позже или переименовано? – SashaArz

+0

Возможно, он был добавлен в таблицу после ее создания. Может ли это вызвать проблему? Таблица имеет столбец описания как «varchar (800)», и сущность имеет «публичное описание строки {get; set;}» ... поэтому EF знает, что это есть. –

0

Это не может быть ответом, который вы ищете, но всякий раз, когда я сталкиваюсь с таким же вопросом с EF, I полностью удалите таблицу, затем выполните сборку. Если вы используете TFS, вы всегда можете отменить свои ожидающие изменения, если это не работает, что является предостережением, которое я использую, когда я делаю это для себя.

+0

Спасибо Lexi - я не уверен, что хочу пойти дальше и сделать это еще ... хотя я действительно не уверен, что еще делать ... Я не понимаю, почему этот столбец просто не спасет - никаких ошибок или чего-то еще, просто не будет брать. –

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