Yes, is which why you should call it immediately, right after you call the Update method. As you correctly point out, it surely doesn't make sense to use it in any other manner.
Here is an example where it could come in handy. Say, for instance, you have two tables: Orders and OrderItems. The OrderItems table is going to contain an OrderID column that is a foreign key back to the Orders table (OrderID would be a primary key column in Orders).
When you place OrderItems in your dataset, you have no idea what value to put in that foreign key OrderID column, because the current order hasn't been saved yet. You have a classic chicken-and-egg situation. What to do?
Easy... when you create the OrderItems, just put in any dummy value you want (it is going to be replaced with the correct value in a minute).
When you've added all the items you want, the current order is finished and you'll want to save it. To do that, do an Update on the OrdersTableAdapter, then immediately call the GetLastIdentityValue() method you've set up:
ordersTableAdapter.Update(myDBDataSet.Orders);
int orderId = (int) ordersTableAdapter.GetLastIdentityValue();
This gives you the number to put in that foreign key column of the OrderItems table. So, now you loop through the dataset of the OrderItems, set each OrderID value of each accordingly, then update that:
foreach (myDBDataSet.OrderItemsRow row
in myDBDataSet.OrderItems)
{
row.OrderID = orderId;
}
orderItemsTableAdapter.Update(myDBDataSet.OrderItems); Voila! All the foreign keys match, anf the integrity of the database is maintained.