Actualización (EF Core 3.x):
Todavía no hay forma pública de obtener EntityTypeBuilder
, pero al menos el argumento del constructor se ha modificado para que sea IMutableEntityType
tipo, por lo que sólo
using Microsoft.EntityFrameworkCore.Metadata.Builders;
es necesario, y el código correspondiente ahora es
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Original (EF Core 2.x):
El problema es que el ClrType
no es suficiente para identificar el tipo de entidad de propiedad, por lo tanto, modelBuilder.Entity(Type)
no se puede utilizar para obtener el EntityTypeBuilder
instancia necesaria para configurar con fluidez las propiedades de la entidad.
Parece que no hay un buen público forma de hacerlo en EF Core 2.x, así que todo lo que puedo sugerir es usar algunos de los internos de EF Core (afortunadamente accesible públicamente bajo la típica advertencia de uso interno).
Necesitarías lo siguiente using
s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
El primero es para EntityTypeBuilder
clase, la segunda es para AsEntityType()
método de extensión que le da acceso a la clase interna que implementa el IEntityType
, y en particular el Builder
propiedad.
El código modificado se ve así:
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)");
}
}
}