Прежде всего, необходимо ли менять идентификатор клиента? Если это приводит к ошибке, я думаю, что это не так, поэтому вы должны пометить этот столбец как ReadOnly (IsReadonly = "True", я считаю).
Во-вторых, если вам нужно обновить объект из базы данных, вам нужно вызвать функцию Refresh () для текста данных, передавая ваш объект в качестве параметра. Это отзовет текущие значения из базы данных.
В-третьих, для редактирования и отката всего объекта DataGrid поддерживает интерфейс IEditableObject, который позволяет объекту предоставлять локальные методы, подобные транзакциям (в основном он создает внутренние копии данных при каждом вызове BeginEdit и может отменить меняется при необходимости). Это все ручной процесс, но это интерфейс, который долгое время существовал в Windows Forms, если я не ошибаюсь, и вы должны быть в состоянии найти тонны информации об этом (или кто-то лучше, чем я, может дать здесь вам несколько примеров).
Вы можете реализовать этот интерфейс на своих объектах (через частичные классы, поскольку ваши объекты являются классами LinqToSQL, предположительно сгенерированными конструктором).
Вот статья о DataGrid и некоторых опциях, которые у вас есть. Он немного староват, но может дать вам еще несколько советов. Здесь - другой, более короткий.
Кстати, проверьте WPF toolkit еще раз, они только что выпустили новую версию (мартовская версия 2009), которая может иметь больше поддержки для редактирования / проверки, чем она использовала тоже.