【发布时间】:2009-12-20 03:24:40
【问题描述】:
我有一个存储联系人及其电话的表。
联系人:ContactId (int, PK), FirstName (varchar), LastName (varchar)
Phone: PhoneId (int, PK), ContactId(int FK), Number (varchar), SortOrder (tinyint)
我希望在每个联系人下,用户应该能够保持电话的优先级,这意味着电话的 SortOrder 列应该在每个 ContactId 下按连续数字。
例如,将第一个电话添加到用户时,其 SortOrder 应为 1,第二个为 2,依此类推。
假设用户向用户添加了 5 个手机,现在他想将手机(有订单)3 移动到放置 2,它应该将当前 2 推送到放置 3,反之亦然。
如果他想让电话 1 持续使用,它应该将所有电话的 SortOrder '拉'-1,然后将之前的 1 分配给 5。
我希望这个系统保持一致,并且在我拥有的地方没有开放的边缘:
- 一组具有相同排序顺序值的 2 部手机
- 组中的第一个电话值大于 1
- 组中最后一个电话的值高于或小于组中电话数量的电话
- 等。等等等等。
到目前为止,我认为我很清楚(是吗)。
现在我的问题是,考虑到我在桌面应用程序中使用 .NET EF 检索数据,我将使用 Contact.Phones 导航属性访问手机。
应该在 DAL 中还是在服务器 AFTER INSERT, UPDATE 触发器中实现这个系统?
我个人认为这必须在服务器上实现,因为想象不同的用户同时使用相同的联系电话,这可能会破坏一致性,是吧?
欢迎任何有关此自定义排序问题的提示、链接、代码、建议笑话。
我还认为 ROWNUMBER() 是检索数据的一个好主意,但我需要保持排序,而不仅仅是选择它。
注意事项:
一般来说,我在this 答案的延续中问了这个问题,我决定使用,联系电话的例子只是为了让事情变得简单。
我发现 this 帖子讨论了我的问题,但那里没有提供技术建议。
提前致谢。
【问题讨论】:
标签: sql-server-2005 entity-framework sorting