对于喜欢危险生活的人来说,这是可能的,尽管不建议重新设置身份栏。
TSQL 是
dbcc checkident ([tableName], reseed, [previousHighestID])
给定下表:
create table x ( a int identity(1,1), y varchar(max) )
实体框架:
using (var context = new XContext())
{
context.Database.SqlCommand("insert into x select 'abc'");//id 1
context.Database.SqlCommand("insert into x select 'cba'");//id 2
context.Database.SqlCommand("delete from x where a = 2");//delete id 2
context.Database.SqlCommand("declare @identMax int; select @identMax = max(a) from x; dbcc checkident (x, reseed, @identMax)");
//reseed identity to 1 ( so next insert will be id 2 )
context.Database.SqlCommand("insert into x select 'def'");//id 2 (again!)
var X = context.X.SqlQuery("select * from x").ToList();
}
真的不用担心一些缺失的值。一个 int 或 bigint 列可以表示很多值。
我想起了 Jack Handy 的一个深刻想法:
“如果你把钥匙掉进熔岩里,就让它们走吧,伙计,它们已经不见了。”