Pembaruan (EF Core 3.x):
Masih belum ada cara umum untuk mendapatkan EntityTypeBuilder
, tetapi setidaknya argumen konstruktor telah dimodifikasi menjadi IMutableEntityType
ketik, jadi hanya
using Microsoft.EntityFrameworkCore.Metadata.Builders;
diperlukan, dan kode yang sesuai sekarang adalah
var entityTypeBuilder = new EntityTypeBuilder(entityType);
Asli (EF Core 2.x):
Masalahnya adalah ClrType
tidak cukup untuk mengidentifikasi tipe entitas yang dimiliki, oleh karena itu modelBuilder.Entity(Type)
tidak dapat digunakan untuk mendapatkan EntityTypeBuilder
instance yang diperlukan untuk mengonfigurasi properti entitas dengan lancar.
Sepertinya tidak ada publik yang bagus cara melakukannya di EF Core 2.x, jadi yang bisa saya sarankan adalah menggunakan beberapa internal EF Core (untungnya dapat diakses publik di bawah peringatan penggunaan internal yang khas).
Anda memerlukan using
berikut ini s:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
Yang pertama adalah untuk EntityTypeBuilder
kelas, yang kedua adalah untuk AsEntityType()
metode ekstensi yang memberi Anda akses ke kelas internal yang mengimplementasikan IEntityType
, dan khususnya Builder
properti.
Kode yang dimodifikasi terlihat seperti ini:
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)");
}
}
}