Aktualisierung (EF Core 3.x):
Immer noch kein öffentlicher Weg, um EntityTypeBuilder zu bekommen , aber zumindest das Konstruktorargument wurde in IMutableEntityType geändert Typ, also nur
using Microsoft.EntityFrameworkCore.Metadata.Builders;
wird benötigt, und der entsprechende Code lautet jetzt
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Original (EF Core 2.x):
Das Problem ist, dass der ClrType reicht nicht aus, um den eigenen Entitätstyp zu identifizieren, daher modelBuilder.Entity(Type) kann nicht zum Abrufen des EntityTypeBuilder verwendet werden Instanz, die für die reibungslose Konfiguration der Entitätseigenschaften benötigt wird.
Scheint, als gäbe es keine gute Öffentlichkeit Möglichkeit, dies in EF Core 2.x zu tun, daher kann ich nur vorschlagen, einige der Interna von EF Core zu verwenden (zum Glück öffentlich zugänglich unter der typischen internen Verwendungswarnung).
Sie benötigen die folgende using s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
Der erste ist für EntityTypeBuilder Klasse, die zweite ist für AsEntityType() Erweiterungsmethode, die Ihnen Zugriff auf die interne Klasse gibt, die den IEntityType implementiert , und insbesondere der Builder Eigentum.
Der geänderte Code sieht folgendermaßen aus:
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)");
}
}
}