У меня проблемы с сохранением изменений, внесенных в мой POCO, обратно в базу данных.
Когда приложение запускается, я собираю все нужные мне объекты в объекты POCO, затем, когда я нажимаю кнопку «Сохранить», я создаю новый экземпляр ObjectContext, затем я должен зациклить объекты, прикрепить их к контексту, а затем обнаружить изменения и сохранить.
public void SaveData() {
using (SolEntities sec = new SolEntities(_cxnStr)) {
foreach (ExtViews.Planet p in Planets) {
sec.CelestialBodies.Attach(p.TheBody);
sec.CelestialBodies.ApplyCurrentValues(p.TheBody);
}
sec.SaveChanges(SaveOptions.AcceptAllChangesAfterSave | SaveOptions.DetectChangesBeforeSave);
}
}
Но, похоже, это не работает, я мог заставить его работать двумя способами:
A) Создайте локальный список планет перед циклом foreach
(чтобы заставить их генерироваться из БД перед применением измененных значений, которые я предполагаю), и удалите параметр Attach
.
или же
B) Переключите строку ApplyCurrentValues
для этой строки:
sec.ObjectStateManager.ChangeObjectState(p.TheBody, System.Data.EntityState.Modified);
Но ручное принудительное изменение ObjectState для каждого объекта кажется немного излишним, особенно если они не были изменены, я мог бы что-то внутренне сохранить, был ли он изменен или нет, но я думал, что ApplyCurrentValues сделает это в первое место?