Ответ 1
Метод ObjectContext.AcceptAllChanges - MSDN
Если был вызван метод SaveChanges и AcceptAllChangesAfterSaveне был указан, пользователь должен вызвать метод AcceptAllChanges. Метод AcceptAllChanges полезен в сценарии, когда транзакция не удалось, и пользователь хочет повторить попытку.
Вы можете увидеть это: http://blogs.msdn.com/b/alexj/archive/2009/01/11/savechanges-false.aspx
Если вы вызываете SaveChanges() или SaveChanges (true), EF просто предполагает что если его работа завершится хорошо, все будет в порядке, так что это будет отменить изменения, которые он отслеживал, и ждать новых изменений.
К сожалению, если что-то пойдет не так в другом месте в транзакции, поскольку EF отказался от изменений, которые он отслеживал, мы не удается восстановить.
Здесь находятся SaveChanges (false) и AcceptAllChanges().
SaveChanges (false) указывает EF выполнить необходимую базу данных команды, но держитесь за изменения, чтобы их можно было воспроизвести, если необходимо.
Теперь, если более сложная транзакция не удалась, вы можете повторить спецификацию EF бит, с другим вызовом SaveChanges (false). В качестве альтернативы вы можете пройдите через диспетчер состояний, чтобы зарегистрировать то, что не удалось.
После успешной успешной транзакции вы просто вызываете AcceptAllChanges() вручную, и изменения, которые отслеживались отбрасываются.