У меня есть некоторые DataTables с столбцом ID с включенным AutoIncrement как на стороне сервера MySQL, так и на стороне схемы ADO.NET (загружается из файла схемы XML). Я бы не хотел заботиться об этих идентификаторах при вставке строк, потому что их единственное использование - иметь первичный ключ для таблицы - ссылок на внешние ключи нет. Тем не менее, DataTable будет содержать строки, когда новые строки должны быть добавлены, т.е. е. строки с идентификаторами, начиная с 1, уже находятся в DataTable.ConstraintException в DataTable.Rows.Add с автоинкрементной колонкой
Значение по умолчанию AutoIncrementSeed для столбца ID равно -1, а значение AutoIncrementStep равно 1 (осталось только значения по умолчанию, предоставленные Visual Studio). Все кажется довольно хорошим, если я хочу только вставить две новые строки сразу, потому что когда они созданы с помощью dataTable.NewRow(), они получают идентификаторы -1 и 0. Но если я хочу добавить третью строку, она получит идентификатор 1, назначенный NewRow(). Впоследствии возникает исключение ConstraintException, когда я хочу вставить новую строку с dataTable.Rows.Add (...), поскольку там уже есть строка с идентификатором = 1.
Я полагаю, что отключить материал AutoIncrement для ADO.NET схема не является решением, потому что тогда мне все равно придется убедиться, что идентификаторы уникальны, прежде чем добавить строки с .Rows.Add()
Что было бы простым/изящным решением этой проблемы? Прямо сейчас я не могу себе представить, что это очень необычная задача.
Спасибо!
Спасибо за ответ, но я думаю, что я искал что-то другое. Ваш подход должен работать, но моя цель состояла в том, чтобы организовать его таким образом, что мне больше не нужно назначать или проверять идентификаторы. По сути, любые «автономные» назначенные идентификаторы никогда не попадают в базу данных MySql, потому что оператор SQL insert не упоминает идентификатор. Вот почему я думал, что будет работать без них. – JayK