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