Пользовательский порядок сортировки с 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)

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