2012-07-12 41 views
-2

任何人都知道如何解决此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保持不变。

+7

你为什么要这样做? – Erix 2012-07-12 02:06:37

+0

你能得到表创建脚本并粘贴在这里吗? – 2012-07-12 02:06:51

+0

你有触发器吗? – 2012-07-12 02:07:17

回答

6

不是做到这一点,假设有人链接到你的页面,http://mysite.com/article.aspx?ArticleID=1234,并且你删除了它之前的一些索引,突然间1234引用了完全不同的东西。更不用说所有必须更新的外键约束了(意味着你的数据库已经正常化了)。

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

+0

只是想着它而让我不寒而栗。我们拥有数十万个数据库,甚至有数百万个数据库。多么浪费处理能力(和努力)会是! – ApplePie 2012-07-12 02:19:24

0

我相信做到这一点的唯一方法是首先删除有问题的项目,然后选择表中的项目,删除表格,然后再次创建它,然后再插入表格数据。

这只有在db中没有外键链接的情况下才有可能,否则将会出现引用错误。

除此之外..只是不这样做。

如果您确实需要连续编号的列,可以添加另一列,该列不是可更新的主键列,而不会破坏与其他表的关系。但是,再次,你不能从其他表引用它