2009-05-05 39 views
0

我有以下模式:操作涉及外键插入单元测试阶段时引起问题

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; 

到目前为止好..它在生产环境下工作!

唯一的问题是在单元测试阶段。我测试数据访问层,在测试开始时,数据库将被清除并重新填充初始数据。但问题是每次重新填充时,statusidjobid都会增加。所以在单元测试中,不能像以前那样插入,因为statusid一直在变化。

我在考虑改变我的insert statement,以便它对单元测试更友好..任何想法?

编辑:这应该是一个数据库/ ORM不可知论问题。因为我使用SQL服务器,MYSQL,MS Access和Propel,NHibernate等。所以我想要可以应用于每种情况的通用解决方案。

编辑2:插入标识字段值似乎不起作用。因为当你填充一个表格(通过ORM)时,你不能指定标识字段值,至少Propel不会允许。

回答

0

您的数据库是否支持插入标识字段?这是最明显的答案(在单元测试中用已知ID填充状态表)。

+0

在我的场景中,我无法插入到身份字段中。举例来说,在推进中,当您填充表格时,您无法指定标识字段值。 – Graviton 2009-05-05 03:03:06