Auto incrementing is found in many database products, but how can it possibly work
properly in your application? The connected classes haven’t been covered yet, but you can
imagine that at some point you might want to send your new data to a back-end database. If
your application supplies the auto-increment values, what will the database do, especially if it
receives duplicate values from different client applications?
The answer is that these auto-increment values are never sent to the database because the
auto-increment column in the database table will provide a value when the new row is added.
After each new row is added, the back-end database table generates a new auto-increment
number, and then your application will query the database to get the newly created number.
Your application will then update its primary key number to the values that came from the
database. This means that all foreign key references will need to be updated as well.
So what happens if you add new rows in your application to generate auto-increment
values of 1 to 100 and then send these rows back to the database table, and the table already
has 10 rows? When the first row is sent from your application, it has an auto-increment value
of 1. The new auto-increment number created in the database will be 11. Your application
queries for the 11 and tries to change the 1 to an 11 but throws an exception because 11 is
already in your data table.
To solve this problem, set
AutoIncrementSeed to -1 and set AutoIncrementStep
to -1. This
will cause negative numbers to be generated; they won’t conflict with the values coming from
the database because the database doesn’t generate negative numbers.