Na początku chciałbym powitać wszystkich, jako że jest to mój pierwszy wpis. :)

Mam problem z aktualizacją typowanego dataseta za pomoca TableAdapterManager.UpdateAll().

Dla uproszczenia przykładu ograniczę się w przykładzie do jednej tabeli.

Mam tabelę Customers z następującymi kolumnami:

CustomersId (klucz główny)
Name
Surname

W tabeli Customers mam jeden rekord
1, "Jan", "Kowalski"

Następnie próbuję usunąć ten rekord z typowanego datasetu i dodać kolejny o tym samym kluczu

głównym, np.:
1, "Adam", "Nowak"

Teraz w typowanym datasecie mam jeden rekord usunięty i jeden rekord dodany. Oba o tym samym kluczu głównym:
1, "Jan", "Kowalski" (oznaczony jako usunięty)
1, "Adam", "Nowak"(oznaczony jako dodany)

Problem pojawia się, gdy wywołuje dla TableAdapterManager metodę UpdateAll().

Otrzymuję wyjątek OleDbException:
"Nie wprowadzono zmian w tabeli, gdyż doprowadziłoby to do powtórzenia wartości w indeksie, kluczu podstawowym lub relacji. Zmień dane w polach zawierających powtarzające się dane, usuń indeks lub zdefiniuj go tak, aby umożliwić powtarzanie się danych."

Wiem, że TableAdapterManager.UpdateAll() najpierw aktualizuje rekordy, później wstawia, a na końcu usuwa wiersze i z tego najprawdopodobniej wynika problem. Przy próbie wstawienia rekordu widzi, że w bazie siedzi jeszcze nieusunięty rekord o tym samym kluczu głównym.

Domyślam się, że TableAdapterManager powinien najpierw usunąć ten rekord przed próbą wstawienia nowego (o tym samym kluczu głównym).

Pytanie:
Jak w takiej sytuacji zaktualizować (zapisać zmiany) za pomocą TableAdapterManager.UpdateAll()?

P.s. wiem, że dla tego konkretnego przykładu rozwiązaniem byłoby pobranie pierwszej wolnej wartości klucza głównego (biorąc pod uwagę również usunięte rekordy). Takie rozwiązanie nie wchodzi w grę w moim przypadku, ponieważ mam wiele tabel na różnych poziomach w hierarchii, które mają klucze główne składające się z wielu kolumn.

Z góry dziękuję za sugestie i podpowiedzi.