Обновление вложений в Entity Framework не работает - PullRequest
14 голосов
/ 18 января 2011

Я пытаюсь обновить объект POCO, используя платформу сущностей, следующим образом:

 context.Jobs.Attach(job);
 context.SaveChanges();

Это не работает.Не выдается никакой ошибки, просто не обновляются значения в базе данных.

Я пытался:

context.Jobs.AttachTo("Jobs", job);
context.SaveChanges();

Ничего плохого, все еще нет ошибок и нет обновлений.

Ответы [ 4 ]

19 голосов
/ 18 января 2011

А как насчет изменения ObjectState?

context.ObjectStateManager.ChangeObjectState(job, System.Data.EntityState.Modified);

Из MSDN: ObjectStateManager.ChangeObjectState Метод .

3 голосов
/ 18 января 2011

Полагаю, вы работаете с отсоединенным объектом - проверьте вторую часть этого ответа .

1 голос
/ 19 февраля 2013

сначала нужно получить задание, а затем успешно его обновить, chk ниже фрагмента

  var job = context.Jobs.Where(p => p.Id == id).FirstOrDefault();
//apply your changes
job.Title = "XXXX";
///....
context.SaveChanges();
0 голосов
/ 07 октября 2014

Еще одна причина, по которой это может не работать, - это когда соответствующий файл Jobs.cs был зафиксирован, а файл .edmx - нет.Это означает, что свойство присутствует, но не отображается, и поэтому EF не считает объект модифицированным.Например:

...
using (var dao = new DbContext())
{
    dao.Jobs.Attach(job);
    job.SomeProperty = 1234; // SomeProperty exists but is not in the .edmx
    dao.SaveChanges();
}

, если SomeProperty присутствует в Jobs.cs, но отсутствует в файле .edmx, этот код будет компилироваться и выполняться без подсказки, что что-то не так, но SomeProperty не будет обновляться в базе данных,У меня была лучшая часть дня, чтобы найти эту.

...