Aggiornamento (EF Core 3.x):
Ancora nessun modo pubblico per ottenere EntityTypeBuilder
, ma almeno l'argomento del costruttore è stato modificato per essere IMutableEntityType
digita, quindi solo
using Microsoft.EntityFrameworkCore.Metadata.Builders;
è necessario e il codice corrispondente ora è
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Originale (EF Core 2.x):
Il problema è che il ClrType
non è sufficiente per identificare il tipo di entità di proprietà, quindi modelBuilder.Entity(Type)
non può essere utilizzato per ottenere EntityTypeBuilder
istanza necessaria per configurare in modo fluido le proprietà dell'entità.
Sembra che non ci sia un buon pubblico modo per farlo in EF Core 2.x, quindi tutto ciò che posso suggerire è utilizzare alcuni degli interni di EF Core (fortunatamente accessibile pubblicamente sotto il tipico avviso di utilizzo interno).
Avresti bisogno del seguente using
s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
Il primo è per EntityTypeBuilder
class, la seconda è per AsEntityType()
metodo di estensione che ti dà accesso alla classe interna che implementa IEntityType
, ed in particolare il Builder
proprietà.
Il codice modificato si presenta così:
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)");
}
}
}