У меня возникли проблемы с сохранением изменений, внесенных в мой POCO обратно в базу данных.Сохранение изменений 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);
}
}
Но это не похоже на работу, 2 способа я мог заставить его работать было либо: А) Создание локального списка планет перед циклом foreach
(чтобы заставить их быть сгенерированы из Db, прежде чем применять измененные значения, которые я предполагаю), и удалите Attach
. или B) Переключите ApplyCurrentValues
линию для этого:
sec.ObjectStateManager.ChangeObjectState(p.TheBody, System.Data.EntityState.Modified);
Но вручную заставляя ObjectState к модифицирована для каждого объекта кажется немного излишним, особенно если они не были изменены, я мог держать что-то с внутренней стороны был ли он изменен или нет, но я думал, что ApplyCurrentValues сделает это в первую очередь?
Отметьте мой ответ здесь: http://stackoverflow.com/questions/3635071/update-relationships-when-saving-changes-of-ef4-poco-objects/3635326#3635326 Это объясняет, почему вы должны установить состояние для каждый объект - при использовании отключенных объектов необходимо выполнить синхронизацию вручную. –