Просто думал, что смогу добавить свои два цента
Здесь открыта проблема для этого: https://github.com/aspnet/EntityFrameworkCore/issues/10784
Решение Ивана будет работать для простых типов, таких как DateTime
и т. Д., Но онопроизойдет сбой при использовании пользовательских типов при вызове entityType.GetProperties()
, это лучше описано в проблеме в ссылке выше.Чтобы заставить его работать с пользовательскими типами, вы должны будете использовать entityType.ClrType.GetProperties()
.
. Для универсального обходного пути вы можете использовать этот метод расширения:
public static class ModelBuilderExtensions
{
public static ModelBuilder UseValueConverterForType<T>(this ModelBuilder modelBuilder, ValueConverter converter)
{
return modelBuilder.UseValueConverterForType(typeof(T), converter);
}
public static ModelBuilder UseValueConverterForType(this ModelBuilder modelBuilder, Type type, ValueConverter converter)
{
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var properties = entityType.ClrType.GetProperties().Where(p => p.PropertyType == type);
foreach (var property in properties)
{
modelBuilder.Entity(entityType.Name).Property(property.Name)
.HasConversion(converter);
}
}
return modelBuilder;
}
}