2015-06-02 6 views
1

В чем разница между SaveOptions.AcceptAllChangesAfterSave и SaveOptions.DetectChangesBeforeSave в Entity Framework? Когда использовать SaveOptions.None?Entity Framework: SaveOptions.AcceptAllChangesAfterSave vs SaveOptions.DetectChangesBeforeSave

Данные параметры представлены в objectContext.SaveChanges(SaveOptions options).

Можно ли использовать любой из этих опций для изменения изменений, сделанных objectContext.SaveChanges()?

ответ

2

Это две совершенно разные вещи. Обратите внимание, как SaveOptions имеет атрибут Flags: это означает, что вы можете объединить несколько флагов, в этом случае сделать SaveOptions.AcceptAllChangesAfterSave | SaveOptions.DetectChangesBeforeSave.

И если вы задаетесь вопросом о чем-то вроде SaveOptions.None | SaveOptions.AcceptAllChangesAfterSave, тогда имейте в виду, что SaveOptions.None - это нулевое значение, поэтому это всего лишь длинный способ написания SaveOptions.AcceptAllChangesAfterSave.

Значит, вы используете SaveOptions.None, если вы не хотите ни SaveOptions.AcceptAllChangesAfterSave, ни SaveOptions.DetectChangesBeforeSave.

Можно ли использовать любой из этих опций для изменения изменений, сделанных objectContext.SaveChanges()?

В контексте? Если вы не, укажите SaveOptions.AcceptAllChangesAfterSave, тогда все изменения будут сохраняться локально как unsaved. Все добавленные объекты останутся в «добавленном» состоянии, все измененные объекты останутся в «измененном» состоянии, все удаленные объекты будут по-прежнему доступны, явно запрашивая удаленные объекты вашего контекста. Попытка сэкономить снова, скорее всего, не удастся, так как база данных уже обновлена. Затем вы можете использовать обычные методы для восстановления несохраненных изменений, но для этого требуется много ручной работы с вашей стороны, для этого требуется вручную искать исходные значения всех свойств и восстанавливать это значение. Подробный пример того, как это сделать, я думаю, выходит за рамки этого вопроса, но см. Undo changes in entity framework entities.

В базе данных? Это требует еще большей работы с вашей стороны и даже не может быть вообще возможным: как только объект с столбцом, созданным сервером (например, ключ автоинкремента или поле версии строки), как правило, невозможно восстановить его с помощью тех точных те же самые значения, которые он изначально имел.

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