Я пытаюсь установить преобразователь значений String-Enum для всех enum
свойств всех сущностей в моем проекте EF Core Code-First.
Я могу сделать это вручную следующим образом:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Do this for every single enum property in each of the entities
modelBuilder.Entity<MyEntity>().Property(e => e.MyEnum).HasConversion<string>();
}
Но я ищу общий c способ сделать это для всех свойств с использованием метода расширения. Я попытался использовать приведенный ниже код, но получаю следующую ошибку:
Конвертер для типа модели «объект» не может использоваться для «MyEnum»
public static void SetEnumStringConverter(this ModelBuilder modelBuilder)
{
var properties = modelBuilder?.Model.GetEntityTypes().SelectMany(x => x.GetProperties().Where(y => typeof(Enum).IsAssignableFrom(y.ClrType)));
foreach (var property in properties)
{
property.SetValueConverter(new ValueConverter<object, string>(v => v.ToString(), v => (object)Enum.Parse(property.ClrType, v)));
}
}
Также пробовал следующее, дает мне ту же ошибку
property.SetValueConverter(new ValueConverter<Enum, string>(v => v.ToString(), v => Enum.Parse(property.ClrType, v)));
Очевидно, потому что enum не является объектом?
Тем не менее, есть ли другой способ сделать это в общем c путь?