Atualização (EF Core 3.x):
Ainda não há maneira pública de obter
EntityTypeBuilder
, mas pelo menos o argumento do construtor foi modificado para ser IMutableEntityType
tipo, apenas using Microsoft.EntityFrameworkCore.Metadata.Builders;
é necessário, e o código correspondente agora é
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Original (EF Core 2.x):
O problema é que o
ClrType
não é suficiente para identificar o tipo de entidade de propriedade, portanto, modelBuilder.Entity(Type)
não pode ser usado para obter o EntityTypeBuilder
instância necessária para configurar fluentemente as propriedades da entidade. Parece que não existe um bom público maneira de fazer isso no EF Core 2.x, então tudo o que posso sugerir é usar alguns dos internos do EF Core (felizmente acessível ao público sob o aviso de uso interno típico).
Você precisaria do seguinte
using
s:using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
A primeira é para
EntityTypeBuilder
classe, a segunda é para AsEntityType()
método de extensão que lhe dá acesso à classe interna que implementa o IEntityType
, e em particular o Builder
propriedade. O código modificado fica assim:
var entityTypes = modelBuilder.Model.GetEntityTypes()
.ToList();
foreach (var entityType in entityTypes)
{
var properties = entityType
.GetProperties()
.ToList();
// (1)
var entityTypeBuilder = new EntityTypeBuilder(entityType.AsEntityType().Builder);
foreach (var property in properties)
{
if (property.PropertyInfo == null)
{
continue;
}
if (property.PropertyInfo.PropertyType.IsBoolean())
{
entityTypeBuilder // (2)
.Property(property.Name)
.HasConversion(new BoolToZeroOneConverter<short>())
.HasColumnType("tinyint(1)");
}
}
}