我有一个问题:我有一个表格,它有id,name,rownumber
列。 rownumber
为int
,且有1,2,3,4,..
个数字。
当我想在表格中插入时,我会获得max(rownumber)
并为新行插入max(rownumber)+1
。但我想删除一行时,例如当删除一行rownumber为3时,我想刷新rownumber
并转移rownumber
。
我该怎么办?请帮我。 感谢。
答案 0 :(得分:3)
如果你有10条或者100条记录并且性能无关紧要,你可以使用类似的东西:
using (var ctx = new MyContext())
{
var query = ctx.Entities
.Where(e => e.RowNumber > entityToDelete.RowNumber)
.OrderBy(e => e.RowNumber);
foreach (var entity in query)
entity.RowNumber -= 1;
ctx.DeleteObject(entityToDelete);
ctx.SaveChanges();
}
如果你有数以千计的记录并且表现很重要,那么上面的代码就是一个非常真实的B-A-A-A-A-D 的想法。更好的解决方案是存储过程,以避免将如此多的数据加载到内存中并向DB发送如此多的UPDATE命令(对于每个更改的记录)。更好的方法是避免在第一个地方重新开始(如果不是绝对必要的话),因为你必须明显改变很多其他记录,只因为你删除了一条记录。
修改以粗体突出显示答案的重要部分。
答案 1 :(得分:0)
Slauma涵盖了这样做的大部分缺点。想象一下,如果要为此表添加关系,对于每个关系,您必须根据新的rownumbers更改其他表引用。这可能非常危险。离开它的问题是什么?