Конструктор наборов данных VS2005 / VS2008, вставьте строку в таблицу с автоматически созданным столбцом guid

StackOverflow https://stackoverflow.com/questions/806590

Вопрос

У меня есть строго типизированный 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.

Также может быть какое-то другое решение, о котором я не знаю...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top