Конструктор наборов данных VS2005 / VS2008, вставьте строку в таблицу с автоматически созданным столбцом guid
-
03-07-2019 - |
Вопрос
У меня есть строго типизированный DataTable, созданный с помощью конструктора наборов данных VS2005 / VS2008.
В таблице есть столбец первичного ключа, который является guid, который заполняется SQL server.Проблема в том, когда я хочу добавить строку (или несколько строк) в мою таблицу данных, а затем вызвать Адаптерданных.Обновить метод (передача в DataTable).Когда Адаптерданных.Обновить вызывается, я получаю исключение SQL, в котором говорится, что я не могу вставить NULL в столбец первичного ключа.
Как мне сообщить разработчику, что это автоматически созданный столбец, и я не хочу указывать значение для новых строк?Мне просто нужно значение, сгенерированное SQL.
Я что-то здесь упускаю, или это ограничение конструктора наборов данных?
Я знаю, как добиться этого с помощью LINQ to SQL, но, к сожалению, у меня нет этого в моем распоряжении для этого проекта.
Решение
Возможно, один из этих:
- Если вам не нужен столбец в вашем наборе данных для вашего приложения, удалите его.
- Если вам нужен столбец, но вы не хотите присваивать ему значение, измените его, чтобы разрешить DBNull .
- Вы всегда можете отключить принудительное применение ограничений (вероятно, это плохая идея).:DataSet.Принудительные ограничения = false
- Вы могли бы заполнить столбец суррогатным ключом, который не отправляется в базу данных.
Для первых двух вариантов, если вам нужно удобство, позволяющее разработчику синхронизировать вашу структуру с вашей базой данных, тогда вы могли бы удалить столбец или разрешить null программно, возможно, прямо рядом с "// HACK:" комментарий, объясняющий почему.
Другие советы
Возможно, вы используете NEWID() по УМОЛЧАНИЮ в определении таблицы SQL Server, поэтому проблема может заключаться в том, что разработчик набора данных не видит этот столбец как автоматически созданный.
Может быть, решением могла бы стать генерация guid в коде вашего приложения?Если нет, то вы могли бы установить значение по умолчанию в своем наборе данных, но тогда вам, вероятно, придется также изменить инструкции DataAdapter Insert / Update, чтобы это значение по умолчанию не вставлялось в таблицу Sql Server.
Также может быть какое-то другое решение, о котором я не знаю...