Обновление EF Core 2.1 для обновления значений - PullRequest
0 голосов
/ 05 сентября 2018

Я столкнулся с проблемой при использовании преобразования значений, нового в 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)));
}
}
...