【问题标题】:ASP.net MVC with Entity Framework reordering database records带有实体框架的 ASP.net MVC 重新排序数据库记录
【发布时间】:2016-07-12 08:12:29
【问题描述】:

我一直在努力寻找可以帮助我解决问题的资源,而这似乎是一个相当棘手的问题。

假设我在数据库中有一个表(100 条记录),其中包含一个整数序列字段(增量)。现在我有重新排序列表的功能,用户可以在其中将项目从底部拖到中间(例如序列 100 -> 50)。

目前我将记录序列设置为 50,之后的每条记录都将更新为 1+ 到它们的序列。 (例如 50 变成 51,51 变成 52)等等......

对我来说,这是一种低效的方法,因为它必须更新 50 条记录才能更改顺序,并且可能需要一段时间,尤其是在表变大的情况下。

有没有不需要更新每条记录的有效方式进行重新排序?

【问题讨论】:

  • 我不认为拖放来重新排序用户界面甚至不会在你有太多行要更新的地方可用,所以我不认为它应该是一个巨大的问题。

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

我不明白为什么您认为更新 50 条记录是个问题,而这正是用户正在做的事情。此外,如果表格确实增长了,如果计算机无法处理,用户怎么可能在 UI 中重新排序那么多项目。

如果实体本身很重并且您只需要更改数字,那么您可以编写存储过程或通过 EF 执行原始 SQL 来执行此特定操作。

【讨论】:

    【解决方案2】:

    为表格添加一个名为 'order' 的新列,其类型为 decimal,默认值为 1 到 100。

    当您将 100 拖到 50 时,将此“顺序”值设置为 (49+50)/2,这样原来的 100 将在 49 到 50 之间。并使用“顺序”进行排序。

    【讨论】:

      【解决方案3】:

      您可以根据链表结构对元素进行排序。

      添加一个记录 ID,而不是订单 ID 使用下一个记录 ID。

      不过,这从另一边提出了类似的问题。您必须查看每条记录以确定元素的顺序。

      最佳做法是只更新所有其他记录。

      【讨论】:

        猜你喜欢
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多