Пользовательский порядок сортировки с 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 () как о хорошей идее получения данных, но мне нужно поддерживать сортировку, а не только выбирать ее.

Примечания:
В общем я задал вопрос в продолжениеэто ответ, я решил использовать, пример контактного телефона был просто, чтобы сделать вещи проще. я обнаружилэто пост, обсуждающий мою проблему, но никакой технической консультации там предоставлено не было.

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос