如何重新分配自动增量主键值?

时间:2012-03-28 23:12:54

标签: c# entity-framework-4.1

是否可以设置自动增量字段的值?如果使用主键5删除记录,但当前的自动增量计数为10,是否有任何方法可以重新插入该记录,其主键仍保持为5(而不是11)?我试图用C#中的Entity Framework 4.1来做这件事。

4 个答案:

答案 0 :(得分:5)

我认为你也可以使用

Set Identity_Insert TableName ON 
 Update your Id value
Set Identity_Insert TableName OFF

答案 1 :(得分:2)

引自 Tom Haigh

  

您可以删除主键列并重新创建它。所有的ID   然后将重新分配,我假设按行的顺序   插入

     

但是,我不确定你为什么要这样做,特别是如果你   有其他表持有此表的外键。如果是这样的话   还需要更新这些字段,在这种情况下drop和   重新创建列不是一个好的解决方案。你可以改为   重新命名列,然后删除autoinc / primary key属性   创建一个新的autoinc主键列。然后你会同时拥有   可以用来更新这些外键的新旧ID。

答案 2 :(得分:1)

您可以停用identity specification。您的主键将保持不变,但您可以插入具有您选择的ID的新记录。 插入记录后,您想重新启用身份规范。

答案 3 :(得分:0)

虽然这里提出了一些很好的建议,但在处理这个问题的解决方案时我才意识到了一些事情。数据库是MySQL的披露可能会对此有所帮助,但我当时没有意识到差异会如此之大。事实上,在MySql中没有锁定插入自动增量主键。因此,此代码用于插入主键小于自动增量索引的当前值的记录:

        var sql = @"INSERT INTO Work (
            WorkId ,
            LotId ,
            Description ,
            )
            VALUES (
            '5',  '5', 'This Works'
            );";
        using (var db = new Context())
        {
            db.Database.ExecuteSqlCommand(sql);
        }

正确插入索引为5的记录,即使当前的自动增量计数为11。