Я столкнулся с проблемой при использовании преобразования значений, нового в EF Core 2.1, для преобразования списка в строку.
Поскольку мне не нужно было фильтровать список значений Enum в базе данных, я решил отобразить свой список значений Enum на строку с разделителями-запятыми со значениями int.
Конверсия должна выглядеть следующим образом:
From: List<EnumType>{EnumType.Value1, EnumType.Value2}
To: 1,2
Казалось, все работает нормально, но EF, похоже, не замечает, что список значений Enum был изменен и не выдает обновления в базе данных. Есть ли ограничение, которое не позволяет преобразовывать значения для списков?
Код преобразования значения выглядит следующим образом:
private const char ENUM_LIST_DELIMITER = ',';
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Entity>().Property(x => x.Types)
.HasConversion(x => ConvertToString(x), x => ConvertToEnumList<EnumType>(x));
}
private static List<TEnum> ConvertToEnumList<TEnum>(string value) where TEnum : struct, IConvertible
{
return value?.Split(ENUM_LIST_DELIMITER)
.Select(Enum.Parse<TEnum>)
.ToList();
}
private static string ConvertToString<TEnum>(IEnumerable<TEnum> value) where TEnum : struct, IConvertible
{
return string.Join(ENUM_LIST_DELIMITER, value.Select(x => Convert.ToInt32(x)));
}
}