EF Core — параметр типа Enum Array как строковый массив (string[]) вместо Int Array (int[]) в базе данныхC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF Core — параметр типа Enum Array как строковый массив (string[]) вместо Int Array (int[]) в базе данных

Сообщение Anonymous »

Я пытаюсь преобразовать Enum[] в String[] и обратно в Enum[], но когда значения преобразуются в базе данных, они преобразуются как int[], что с точки зрения надежности может измениться. Если позже будет удален один элемент типа Enum, смещение приведет к тому, что все значения после этого индекса станут недействительными, а не только «один» элемент, который, возможно, будет приведен к значению по умолчанию. Поэтому я хотел бы преобразовать любой Enum[] в String[], аналогичный string.Join.
Однако этот процесс кажется слишком сложным для такой простой задачи.
Я Интересно, я что-то пропустил?
Пример в 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);
}
}
В базе данных это будет «[0, 1, 2]» для:

Код: Выделить всё

new EntityEnum[] { EntityEnum.One, EntityEnum.Two, EntityEnum.Three }
но это должно быть «[Один, Два, Три]». Таким образом, если в какой-то момент Два будет удалено, Три все равно останется Три, а не 1.
Я пробовал вручную с помощью HasConversion, как я уже говорил ранее, но это кажется слишком сложным. В конце концов, для этого требуется ValueComparer (для строки). Кроме того, изменение преобразования по умолчанию может привести к поломке некоторых встроенных селекторов и еще много чего? Поэтому я хотел бы сохранить как можно больше нетронутым.
Есть ли какое-нибудь решение этой проблемы? Или я застрял на ручном преобразовании, которое потенциально может нарушить некоторые запросы, которые можно было бы поддерживать с помощью int[], сохраненного в базе данных?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ead-of-int
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»