Модульное тестирование со столбцами идентификаторов

Я использую столбцы IDENTITY в своих таблицах SQL Server.

У меня есть модульный тест, в котором я удаляю запись данных с определенным идентификатором.

Когда я вставляю тестовые данные, я получаю это исключение:

Не удается вставить явное значение для столбца идентификаторов в таблице «MyTablename», если для параметра IDENTITY_INSERT установлено значение OFF.

Затем я делаю быстрый тест в своей студии управления:

SET IDENTITY_INSERT MyTablename ON

Там написано Command(s) completed successfully.

Я повторно запускаю модульный тест, но все равно получаю ту же ошибку.

Как я вообще к этому отношусь? Я хочу, чтобы моя база данных модульного тестирования со всеми таблицами позволяла мне вручную вставлять значение для столбца идентификаторов.


person Pascal    schedule 22.02.2012    source источник
comment
Это странно - я только что сделал это сегодня, и это сработало просто отлично. Я использовал только SQL Server, а не C# (я вставлял из студии управления).   -  person thursdaysgeek    schedule 23.02.2012


Ответы (1)


SET IDENTITY_INSERT зависит от сеанса. Вы не можете установить для него значение true в SSMS, а затем запустить модульный тест на какой-либо другой установке. Команда SET должна быть частью кода модульного теста.

Кроме того, вы можете установить этот параметр только для одной таблицы за раз, поэтому не похоже, что ваш модульный тест будет работать очень хорошо, если вы не настроите каждую таблицу так, как вам это нужно.

person Aaron Bertrand    schedule 22.02.2012
comment
Поэтому я должен установить его в Table1 на ON, когда я запускаю модульный тест. Когда я делаю еще один тест на Table2, я должен сначала установить его в положение OFF в TAble1? Затем установите его в положение ON в Table2? Могу ли я предположить, что SET IDENTITY_INSERT MyTablename ON может быть помещен в CommandText, и ExecuteNonQuery установит его? - person Pascal; 23.02.2012
comment
Я не уверен, что отдельный вызов ExecuteNonQuery сохранит его за пределами этого вызова - я подозреваю, зависит от того, как используется ваше соединение. Вероятно, безопаснее изменить пакет, который фактически вставляется в таблицу X, - установите SET IDENTITY_INSERT ON в начале пакета и отключите его в конце (или перед установкой для tableY, tableZ и т. д.). - person Aaron Bertrand; 23.02.2012
comment
работал как шарм. Кажется, мне нужно расширить помощника по модульному тесту sql: P. Спасибо Бертран :D - person Pascal; 23.02.2012