В настоящее время я использую Guid
в качестве первичного ключа для своих ContentItem
s в моей первой кодовой структуре Entity Framework Context
. Однако, поскольку Guid
настолько громоздкий Я хотел бы также установить альтернативный, дружественный идентификатор для каждого ContentItem
(или потомок ContentItem
) в соответствии со следующей логикой:Альтернативный идентификатор строки для объектов идентификатора Guid
- Используйте
Name
свойства, чтобы опустить, заменив пропуска с-
, и закончить префикс с-
а - Посмотрите в базу данных, чтобы увидеть, какие другие
ContentItem
имеютFriendlyID
с тем же префиксом, и найти один с самым высоким числовым индексом - Increment, что к 1 и добавить в качестве суффикса
Так первый элемент с именем «Great Story» будет иметь FriendlyID
из great-story-1
, следующий great-story-2
, и так далее.
Я понимаю, что существует целый ряд способов реализации такого рода вещи, но вот мои вопросы:
- Целесообразно явно установить новое поле с альтернативным ID в соответствии с этой логикой, или должен ли я просто запускать запрос каждый раз, применяя те же правила, что и для создания идентификатора, чтобы найти правильный объект?
- Каким образом следует применять настройку альтернативного идентификатора? Должен ли я делать это в моих методах обслуживания для каждого элемента контента во время создания? (Это касается меня, потому что, если кто-то забывает добавить эту логику к методу службы, теперь у объекта нет
FriendlyID
). Или я должен делать это в самой модели, с свойством с вручную определенными геттерами/сеттерами, которые должны запросить БД и узнать, что следующий доступныйFriendlyID
? - Существуют ли альтернативы использованию такого типа
FriendlyID
с целью создания удобных для пользователя запросов URL-адресов и веб-сервисов? Конечная цель этой вещи на самом деле так, что мы можем иметь пользователей перейти кhttp://awesomewebsite.com/Content/great-story-1
и отправляют на правый элемент контента, а неhttp://awesomewebsite.com/Content/f0be271e-ee01-48de-8599-ddd602e777b6
и т.д.
Может быть изменено имя или элемент удален или удален? Если это так, вы хотите, чтобы FriendlyId был стабильным? Когда пользователь возвращается с 5-летней ссылкой, каково ожидаемое поведение? Я предполагаю, что он должен храниться и не генерироваться «на лету». И вам нужно сохранить все ранее используемые значения, чтобы вы не использовали их повторно. – HABO
Посмотрите на URL-адрес этой страницы: http: // stackoverflow.com/questions/20593139/alternate-string-id-for-guid-id-objects –
@HABO - хорошая точка. Вы правы - даже если бы я отсортировал результаты, полученные функцией «Созданный», скажем, если кто-нибудь удалил, он выбросил бы всю схему. –