Ответ 1
Из MSDN:
SaveChanges работает в транзакции. SaveChanges откатывает эту транзакцию и генерирует исключение, если какой-либо из грязных объектов ObjectStateEntry не может быть сохранен.
SubmitChanges запускает транзакцию и откатывается, если возникает исключение при выполнении функции SubmitChanges. Однако это не отменяет изменения в памяти или не отслеживает DataContext; эти изменения необходимо будет отменить вручную. Вы можете начать с нового экземпляра DataContext, если изменения в памяти должны быть отброшены.