删除Entity Framework中的记录后如何移位记录?

时间:2011-10-10 20:17:26

标签: linq entity-framework

我有一个问题:我有一个表格,它有id,name,rownumber列。 rownumberint,且有1,2,3,4,..个数字。

当我想在表格中插入时,我会获得max(rownumber)并为新行插入max(rownumber)+1。但我想删除一行时,例如当删除一行rownumber为3时,我想刷新rownumber并转移rownumber

我该怎么办?请帮我。 感谢。

2 个答案:

答案 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更改其他表引用。这可能非常危险。离开它的问题是什么?