2016-01-04 10 views
0

Я пытаюсь сохранить объект в базе данных с помощью сущности framework. У меня есть этот код, который обрабатывает обновления объекта:DbContext.SaveChanges() не обновляет базу данных

DbSet.Attach(entity); 

После этого я вызываю:

_context.SaveChanges(); 

(я использую единицу работы модели с MVC)

Субъект I хотите добавить состояние «Модифицировано». Вызов SaveChanges не генерирует исключение, но возвращаемое значение равно 0, а строка в БД не обновляется. Любая идея, почему это происходит?

P.S. Я использую тот же контекст для извлечения объекта, а затем для его сохранения.

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

+0

Вы изменили состояние объекта * после того, как * вы его прикрепили? –

+0

Согласно [docs] (https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.attach (v = vs.113) .aspx), DbSet.Attach сбрасывает состояние на 'Unchanged'. –

+0

Если вы выбрали объект из того же контекста, он будет отслежен - нет необходимости прикреплять. https://msdn.microsoft.com/en-us/data/jj592676.aspx –

ответ

2

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

Когда вы привязали объект через Attach, состояние было изменено на Неизменяется.

Цитируя this reference:

Обратите внимание, что объекты, которые уже находятся в контексте в каком-то другом государстве будет их состояние установлено в Unchanged

Поскольку объект был уже в контексте, вам не нужно прикреплять его. Просто измените объект и позвоните SaveChanges.

0

Try This

В контроллере

ObjEdbContext.Entry(qry).State = EntityState.Modified; 
ObjEdbContext.SaveChanges(); 
ModelState.Clear(); 

в этом коде qry означает обновленный запрос ......

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