Uppdatering (EF Core 3.x):
Fortfarande inget offentligt sätt att skaffa EntityTypeBuilder
, men åtminstone konstruktorargumentet har ändrats till att vara IMutableEntityType
typ, så bara
using Microsoft.EntityFrameworkCore.Metadata.Builders;
behövs, och motsvarande kod är nu
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Original (EF Core 2.x):
Problemet är att ClrType
är inte tillräckligt för att identifiera den ägda enhetstypen, därför modelBuilder.Entity(Type)
kan inte användas för att hämta EntityTypeBuilder
instans som behövs för att flytande konfigurera entitetsegenskaperna.
Det verkar som om det inte finns någon bra offentlighet sätt att göra det i EF Core 2.x, så allt jag kan föreslå är att använda några av EF Core internal (lyckligtvis allmänt tillgänglig under den typiska varningen för intern användning).
Du behöver följande using
s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
Den första är för EntityTypeBuilder
klass, den andra är för AsEntityType()
tilläggsmetod som ger dig tillgång till den interna klassen som implementerar IEntityType
, och i synnerhet Builder
egendom.
Den modifierade koden ser ut så här:
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)");
}
}
}