Итак по порядку:1. Есть таблица в БД Oracle, в качестве первичного ключа столбец "ID" типа
RAW (16) - массив байт;
2. Есть DataSet со сгенеренной таблицей из БД Oracle, в качестве первичного ключа столбец "ID" типа
base64Binary (так сгенерила сама студия);
3. Значения "по умолчанию" для "ID" нет - все значения генерю руками.
4. Добавляем 1-ую строку в таблицу:
- первичный ключ уникальный:
NewRow["ID"] = System.Guid.NewGuid().ToByteArray(); |
- заполняем остальные столбцы данными;
- добавляем строку в таблицу - все
ОК;
5. Добавляем 2-ую строку:
- первичный ключ тоже
УНИКАЛЬНЫЙ - заполняем остальные столбцы данными;
- при добавлении строки в таблицу получаем
Exception : Column 'ID' is constrained to be unique. Value 'System.Byte[]' is already present.Мои предположения:
при проверке уникальности первичного ключа таблицы в DataSet'e, Framework приводит его (значение ключа) к строке (ToString()), а преобразование
string SomeStr = ((System.Byte[])ID).ToString(); |
выдает "
System.Byte[]"
Т.е. т.к. значение второго ключа после преобразования к строке тоже равно "System.Byte[]" - срабатывает ограничение на уникальность первичного ключа в таблице.