删除信息后自动更新主键

时间:2012-07-12 02:04:59

标签: c# mysql linq primary-key

任何人都知道如何解决这个ID问题?

例如:

ID | Message
1  |  Hi
2  |  Philemon
3  |  Car              <-- Delete this row
4  |  Tay
5  |  Bye

删除第3行时,行后的ID将自动更新并填写ID。

ID  | Message
1   | Hi
2   | Philemon
3   | Tay
4   | Bye

更多信息:

private void btnDel_Click(object sender, EventArgs e)
    {
        using (testEntities Setupctx = new testEntities())
        {
            int ID = Int32.Parse(lblID.Text);
            var DeleteSh = (from delsh in Setupctx.shifthours
                            where delsh.idShiftHours == ID
                            select delsh).Single();
            Setupctx.DeleteObject(DeleteSh);
            Setupctx.SaveChanges();
            txtStart.Text = "";
            txtStop.Text = "";
            this.Edit_Shift_Hours_Load(null, EventArgs.Empty);
            MessageBox.Show("Selected Shift Timing Has Been Deleted.");
        }
    }

这是删除行的代码。删除后,我需要ID自动更新,以便它将使用下一个数据填充已删除的ID。目前我可以删除信息,但ID保持不变。

2 个答案:

答案 0 :(得分:6)

执行此操作,假设有人链接到您的网页http://mysite.com/article.aspx?ArticleID=1234,并且您之前删除了一些索引,突然间1234引用完全不同的内容。更不用说所有必须更新的外键约束(暗示您的数据库已正确规范化)。

这将是一个并发和可用性的噩梦。

答案 1 :(得分:0)

我认为唯一的方法是首先删除有问题的项目,然后选择表格中的项目,删除表格,然后再次创建表格,然后再次插入表格数据。

只有在您的数据库中没有链接外键时才会这样,否则会出现引用错误。

除此之外..就是不要这样做。

如果您确实需要一个具有连续ID的列,则添加另一个不是主键列的列,您可以在不破坏与其他表的关系的情况下进行更新。但话说回来,你将无法从其他表中引用它