C# 具有标识列的单元测试
我正在SQL Server表中使用C# 具有标识列的单元测试,c#,sql-server,unit-testing,identity-column,C#,Sql Server,Unit Testing,Identity Column,我正在SQL Server表中使用IDENTITY列 我有一个单元测试,其中我删除了一个具有特定id的数据记录 当我插入testdata时,会出现以下异常: 当identity\U insert设置为OFF时,无法在表“MyTablename”中为identity列插入显式值 然后,我在我的管理工作室中进行快速测试: SET IDENTITY_INSERT MyTablename ON 它显示命令已成功完成。 我重新运行单元测试,但仍然得到相同的错误 一般来说,我该怎么做?我希望包含所有表的单
IDENTITY
列
我有一个单元测试,其中我删除了一个具有特定id的数据记录
当我插入testdata时,会出现以下异常:
当identity\U insert设置为OFF时,无法在表“MyTablename”中为identity列插入显式值
然后,我在我的管理工作室中进行快速测试:
SET IDENTITY_INSERT MyTablename ON
它显示命令已成功完成。
我重新运行单元测试,但仍然得到相同的错误
一般来说,我该怎么做?我希望包含所有表的单元测试数据库应允许我为标识列手动插入一个值。
SET identity\u insert
是特定于会话的。您不能在SSMS中将其设置为true,然后在其他装备中运行单元测试。SET
命令需要是单元测试代码的一部分
此外,您一次只能将此设置设置为一个表,因此,除非您根据需要设置每个表,否则单元测试似乎不会很好地工作。这很奇怪——我今天刚刚这样做了,效果很好。我只使用SQL Server,不使用C#(我是从management studio中插入的)。因此,在运行单元测试时,我必须在表1中将其设置为on。当我在表2中做另一个测试时,我必须首先在表1中将其设置为OFF?然后在表2中设置为ON?我是否可以假设“SET IDENTITY\u INSERT MyTablename ON”可以放在CommandText中,ExecuteOnQuery将对其进行设置?我不确定对ExecuteOnQuery的单独调用是否会将其保留在该调用之后-我怀疑这取决于您的连接是如何利用的。修改实际插入到tableX中的批次可能更安全—在批次开始时启用SET IDENTITY_INSERT,并在最后(或在为tableY、tableZ等设置之前)将其设置回原来的状态。效果非常好。看来我必须扩展我的sql单元测试助手:P。谢谢Bertrand:D