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)");
}
}
}