Заказ по локализованному перечислению - PullRequest
0 голосов
/ 24 февраля 2020

Есть ли лучшая практика для упорядочения данных по локализованным enum в ef core?

У моего объекта есть enum, который может быть переведен на многие языки, но когда пользователь хочет упорядочить данные на enum мне нужно упорядочить его по локализованной строке, а не по индексу.

Я не хочу использовать оценку клиента. Я не могу использовать преобразование значений, потому что мне нужно поддерживать больше языков.

У вас есть предложения?

1 Ответ

0 голосов
/ 24 февраля 2020

Используйте таблицу поиска вместо попытки навязать порядок сортировки со значением перечисления в качестве идентификатора и дополнительными полями для кода языка и перевода. Если вы закроете перевод и языковой код индексом, вы сможете быстро сортировать и фильтровать по переведенному значению.

Перечисления - это концепция клиента language , предназначенная для нечастого изменения. В базе данных списки значений хранятся в таблицах. Перечисляемые значения будут отображаться как значения magi c, если вы не сохраните их в своих собственных таблицах.

Как только вы обнаружите, что вам нужно выполнить операции с данными (например, сортировку) над незначными свойствами, такими как имена, или вы обнаружите, что число значений меняется слишком часто, вам нужно также начать рассматривать перечисления как реляционные сущности.

Это не означает, что они должны отображаться как ORM-сущности в вашем DbContext, если только это не DbContext, предназначенный для управления переводами:

  • Вы можете использовать разные контексты для запросов и редактирования. Локализованная сортировка обычно используется для отчетов о запросах. Отображение материала в сетке также является отчетным запросом. В этих случаях вы можете сопоставить вашу сущность с локализованным представлением, которое объединяет основные таблицы с таблицами поиска и позволяет фильтровать и сортировать по языку.
  • Вы можете использовать необработанные запросы , чтобы отобразить на функция или необработанный запрос, который возвращает имя поиска и добавляет к нему дополнительные операторы LINQ.
  • Вы можете использовать EF Core Interceptors , чтобы добавить логи поиска c к запросу, хотя это более сложно, чем использование различных контекстов.

Если вы хотя вы планируете поддерживать многие языки, вам следует подумать о правильном дизайне локализации данных, хранящихся в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...