Update (EF Core 3.x):
Nog steeds geen openbare manier om EntityTypeBuilder
te krijgen , maar het constructorargument is in ieder geval gewijzigd in IMutableEntityType
type, dus alleen
using Microsoft.EntityFrameworkCore.Metadata.Builders;
is nodig, en de bijbehorende code is nu
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Origineel (EF Core 2.x):
Het probleem is dat de ClrType
is niet voldoende om het eigendomstype van de entiteit te identificeren, vandaar modelBuilder.Entity(Type)
kan niet worden gebruikt om de EntityTypeBuilder
. te verkrijgen instantie die nodig is voor het vloeiend configureren van de entiteitseigenschappen.
Het lijkt erop dat er geen goed publiek is manier om dat te doen in EF Core 2.x, dus alles wat ik kan voorstellen is om enkele van de EF Core internals te gebruiken (gelukkig openbaar toegankelijk onder de typische waarschuwing voor intern gebruik).
Je hebt het volgende nodig using
s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
De eerste is voor EntityTypeBuilder
class, de tweede is voor AsEntityType()
uitbreidingsmethode die u toegang geeft tot de interne klasse die het IEntityType
. implementeert , en in het bijzonder de Builder
eigendom.
De gewijzigde code ziet er als volgt uit:
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)");
}
}
}