更新(EF Core 3.x):
EntityTypeBuilder
を取得する公的な方法はまだありません 、ただし、少なくともコンストラクター引数はIMutableEntityType
に変更されています タイプするので、
using Microsoft.EntityFrameworkCore.Metadata.Builders;
が必要であり、対応するコードは現在
var entityTypeBuilder = new EntityTypeBuilder(entityType);
オリジナル(EF Core 2.x):
問題は、ClrType
所有するエンティティタイプを識別するのに十分ではないため、modelBuilder.Entity(Type)
EntityTypeBuilder
の取得には使用できません エンティティのプロパティを流暢に構成するために必要なインスタンス。
良い公開がないようです EF Core 2.xでそれを行う方法なので、私が提案できるのは、EFCoreの内部の一部を使用することだけです。 (幸いなことに、一般的な内部使用警告の下で一般公開されています)。
次のusing
が必要です s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
1つ目はEntityTypeBuilder
用です クラス、2番目はAsEntityType()
用です IEntityType
を実装する内部クラスへのアクセスを提供する拡張メソッド 、特にBuilder
プロパティ。
変更されたコードは次のようになります:
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)");
}
}
}