Использование обработки исключений для управления потоком плохо в 99,99% случаев;в этом случае, среди прочего, потому что вы никогда не знаете, какова истинная причина вашего SoapException.
Более понятный способ - проверить, имеет ли поле идентификатора вашей записи значение;если это так, сделайте обновление, если нет, то создайте (и, возможно, добавьте полученный идентификатор к вашему объекту, если вы будете использовать его дальше).(Мы видели, как Create в записи с идентификатором действительно обновлялся несколько лет назад, но мы так и не смогли его воспроизвести.)
Кроме этого, @ckeller совершенно прав;атрибут, который является нулевым в вашем объекте (потому что он не был в ColumnSet при извлечении из базы данных или не был установлен иначе), не будет затронут в обновлении.