Пользовательский порядок сортировки с SQL-сервером и .NET Entity-Framework
У меня в таблице хранятся контакты и их телефоны.
контакт: ContactId (int, PK), FirstName (varchar), LastName (varchar)
Телефон: 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 () как о хорошей идее получения данных, но мне нужно поддерживать сортировку, а не только выбирать ее.
Заметки:
В общем я задал вопрос в продолжениеэтот ответ, я решил использовать, пример контактного телефона был просто, чтобы сделать вещи проще. Я'мы нашлиэтот пост, обсуждающий мою проблему, но никакой технической консультации там предоставлено не было.
Заранее спасибо.