Ответ 1
Когда вы вызываете SubmitChanges, LINQ to SQL проверяет набор известных объектов, чтобы определить, к ним привязаны новые экземпляры. Если они есть, эти новые экземпляры добавляются в набор отслеживаемых объектов.
Непосредственно перед любыми фактическими изменениями, LINQ to SQL запускает транзакцию для инкапсуляции серии отдельных команд.
Изменения объектов переводится один за другим в команды SQL и отправляются на сервер.
В этот момент любые ошибки, обнаруженные в базе данных, приводят к остановке процесса отправки, и возникает исключение. Все изменения в базе данных откатываются назад, как если бы никаких материалов никогда не происходило.
Для получения дополнительной информации об этом представлении статьи MSDN.
Надеюсь, это поможет!