Однако для такого процесса процесс кажется слишком сложным. простая задача.
Интересно, я что-то пропустил?
Пример в EF Core:
Код: Выделить всё
public enum EntityEnum
{
One,
Two,
Three
}
public class Entity
{
public EntityEnum[] Items { get; set; }
public static void GetEntityBuilder(EntityTypeBuilder entity)
{
entity.Property(e => e.Items)
.HasMaxLength(100)
.HasDefaultValue(null)
.ValueGeneratedNever()
.IsRequired(false);
}
}
Код: Выделить всё
new EntityEnum[] { EntityEnum.One, EntityEnum.Two, EntityEnum.Three }
Я пробовал вручную с помощью HasConversion, как я уже говорил ранее, но это кажется слишком сложным. В конце концов, для этого требуется ValueComparer (для строки). Кроме того, изменение преобразования по умолчанию может привести к поломке некоторых встроенных селекторов и еще много чего? Поэтому я хотел бы сохранить как можно больше нетронутым.
Есть ли какое-нибудь решение этой проблемы? Или я застрял на ручном преобразовании, которое потенциально нарушает некоторые запросы, которые можно было бы поддерживать с помощью int[], сохраненного в базе данных?
Обновление с некоторыми пояснениями:
- Перечисления нужны, поскольку они управляются кодом, а строки анонимны.
- Битовая маска/HasFlag EntityEnum делает это не поддерживать сортировку сохраненных массив
- Читаемость предпочтительна, поскольку его можно не запрашивать, но можно экспортировать во внешнюю поисковую систему, которая позже выполнит синтаксический анализ.
- Читаемость является предпочтительной и С НАСТОЯЩЕГО МОМЕНТА никакие запросы в этом столбце использоваться не будут, но вопрос останется, если он изменится позже.
HasConversion – предпочтительный метод. Я спрашиваю о. Без специального ValueComparer/ValueConverter — какие типы запросов поддерживаются при сохранении EntityEnum[] как [0, 1, 2] в базе данных и почему они не поддерживаются при сохранении EntityEnum[] как [Один, Два, Три] или [ Три, Два, Один]? И есть ли способ добавить поддержку подобных запросов и почему бы и нет? Стандартный сериализатор JSON сегодня волшебным образом обрабатывает любую строку, которая соответствует любому Enum. Если оба «работающих» запроса выполняются в коде, то я не вижу смысла в HasConversion, если это нарушает встроенные преобразования. Если запрос преобразуется в реальный запрос SQL, это совсем другое дело. Но опять же, он, вероятно, мог бы справиться с этим преобразованием так же хорошо, если бы были int[], string[], поскольку в конце концов это все равно столбец varchar (технически это просто строки). Здесь ему также придется совершить какое-то волшебство, преобразовав его во что-то, доступное для запроса, если он выполняет запрос в реальной базе данных.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ead-of-int