ユニットテスト段階中に問題が発生します。操作は、私は次のスキーマを持っている
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:IDフィールド値の挿入が機能していないようです。なぜなら、(ORMを介して)テーブルにデータを入力するときに、少なくともPropelはそれを許可しないで、IDフィールド値を指定することができないからです。
私のシナリオでは、IDフィールドに挿入することはできません。例えば、propelでは、テーブルに値を設定するときにIDフィールドの値を指定することはできません。 – Graviton