NDbUnit не устанавливает поле первичного ключа, указанное в XML, когда столбец является столбцом Identity - PullRequest
1 голос
/ 14 сентября 2011

Я использую NDbUnit для модульного тестирования моего уровня доступа к данным.

Все работало нормально при создании XSD и связанных XML-файлов, которые используются для заполнения различных таблиц строками данных. Однако я только что заметил, что не могу установить PK напрямую через XML для целочисленного столбца PK, когда это столбец идентификаторов.

т.е. Когда база данных автоматически обрабатывает приращение и установку PK при вставке строки, NDbUnit не может переопределить это и установить его сам (насколько я вижу).

Есть ли какой-нибудь способ для NDbUnit переопределить это значение столбца идентификаторов и установить его непосредственно из XML, или я застрял с автоматически увеличивающимся значением, которое SQL Server создает для вставленной строки? Или есть другой шаблон, который я должен использовать, чтобы вставить строку со столбцом идентификаторов, а затем впоследствии использовать это значение в качестве FK для строки другой таблицы?


Обновление:

Я обнаружил, что когда вы выполняете операцию над базой данных NDbUnit, вам нужно установить параметр InsertIdentity, а не просто Insert:

INDbUnitTest database = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connectionString);
database.PerformDbOperation(DbOperationFlag.InsertIdentity);

Однако даже после того, как я внес это изменение, я теперь получаю следующую ошибку при вставке строк:

Невозможно вставить явное значение для столбца идентификаторов в таблице 'myTable' когда IDENTITY_INSERT установлен на OFF.

Это заставит меня поверить, что флаг InsertIdentity, устанавливаемый для метода NBDUnit, фактически не устанавливает IDENTITY_INSERT в значение OFF для конкретной таблицы в SQL Server.

Любые предложения о том, почему этого не произойдет?

1 Ответ

1 голос
/ 21 ноября 2014

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

В вашем XSD выделите столбец идентификаторов и нажмите F4. Когда появится панель свойств, вы, вероятно, увидите, что AutoIncrement имеет значение False. Измените это на True, и оно должно начать работать. Не уверен, почему это происходит случайно, но, надеюсь, это поможет вам.

...