У меня есть следующая схема:
create table statuslookup
{
statusid int primary key,
statusname string unique,
description string
}
create table job
{
jobid int primary key,
jobname string unique,
status_id foreign key reference statuslookup(statusid)
}
Таблица statuslookup
, конечно же, будет предварительно заполнена во время настройки схемы, чтобы позже, когда мы создадим запись в таблице job
, мы могли ссылаться на нее и не получать ошибку внешнего ключа. Чтобы добавить запись в таблицу job
, нам просто нужно использовать простую insert command
:
job = new job();
job.jobname="mytest";
job.status_id=2;
Пока все хорошо ... и это работает в производственной среде!
Единственная проблема - на этапе модульного тестирования. Я тестирую уровень доступа к данным, и в начале теста база данных будет очищена и заполнена исходными данными. Но проблема в том, что каждый раз, когда повторное заселение будет выполнено, statusid
и jobid
будут увеличиваться. Так что в модульном тесте больше нельзя вставлять, как раньше, потому что statusid
все время меняется.
Я думаю о том, чтобы изменить свой insert statement
, чтобы он стал более дружественным к юнит-тестированию ... какие-нибудь идеи?
Редактировать: Это должен быть вопрос, не связанный с базой данных / ORM. Потому что я работаю с SQL-сервером, MYSQL, MS Access и Propel, NHibernate и т. Д. Поэтому я хочу общее решение, которое можно применять к каждому случаю.
Редактировать 2: кажется, вставка значения поля идентификатора не работает. потому что когда вы заполняете таблицу (через ORM), вы не можете указать значение поля идентификатора, по крайней мере, Propel не допустит этого.