Aktualizace (EF Core 3.x):
Stále neexistuje veřejný způsob, jak získat EntityTypeBuilder
, ale alespoň argument konstruktoru byl upraven tak, aby byl IMutableEntityType
typu, tedy pouze
using Microsoft.EntityFrameworkCore.Metadata.Builders;
a odpovídající kód je nyní
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Originál (EF Core 2.x):
Problém je v tom, že ClrType
nestačí k identifikaci vlastněného typu entity, proto modelBuilder.Entity(Type)
nelze použít k získání EntityTypeBuilder
instance potřebná pro plynulou konfiguraci vlastností entity.
Zdá se, že neexistuje žádná dobrá veřejnost způsob, jak to udělat v EF Core 2.x, takže vše, co mohu navrhnout, je použít některé z vnitřností EF Core (naštěstí veřejně přístupné pod typickým varováním pro interní použití).
Budete potřebovat následující using
s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
První je pro EntityTypeBuilder
třída, druhá je pro AsEntityType()
metoda rozšíření, která vám umožňuje přístup k interní třídě implementující IEntityType
, a zejména Builder
vlastnost.
Upravený kód vypadá takto:
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)");
}
}
}