Opdatering (EF Core 3.x):
Stadig ingen offentlig måde at få EntityTypeBuilder på , men i det mindste er konstruktørargumentet blevet ændret til at være IMutableEntityType type, så kun
using Microsoft.EntityFrameworkCore.Metadata.Builders;
er nødvendig, og den tilsvarende kode er nu
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Original (EF Core 2.x):
Problemet er, at ClrType er ikke nok til at identificere den ejede enhedstype, derfor modelBuilder.Entity(Type) kan ikke bruges til at hente EntityTypeBuilder forekomst nødvendig for flydende konfiguration af enhedsegenskaberne.
Det ser ud til, at der ikke er nogen god offentlig måde at gøre det på i EF Core 2.x, så alt jeg kan foreslå er at bruge nogle af EF Core internal (heldigvis offentligt tilgængelig under den typiske advarsel om intern brug).
Du skal bruge følgende using s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
Den første er til EntityTypeBuilder klasse, den anden er for AsEntityType() udvidelsesmetode, som giver dig adgang til den interne klasse, der implementerer IEntityType , og især Builder ejendom.
Den ændrede kode ser således ud:
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)");
}
}
}