Jika saya mengerti dengan benar, Status
hanyalah kelas dasar dan bukan entitas dasar berpartisipasi dalam Warisan Database.
Dalam kasus seperti itu, penting untuk tidak pernah merujuk ke Status
kelas langsung di dalam model dan konfigurasi entitas, mis. tidak ada DbSet<Status>
, tidak ada properti navigasi dengan tipe Status
atau ICollection<Status>
, tidak ada modelBuilder.Entity<Status>()
panggilan dan tidak ada IEntityTypeConfiguration<Status>
.
Sebagai gantinya, Anda selalu harus merujuk ke tipe konkret yang diwarisi dari Status
. Untuk menggunakan kembali kode konfigurasi, Anda harus menggunakan generik terbatas metode atau kelas dan lulus tipe entitas konkret.
Karena Anda menggunakan IEntityTypeConfiguration
kelas, mungkin yang paling alami adalah membuat StatusConfiguration
. Anda kelas generik:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
dan biarkan kelas konfigurasi entitas turunan diturunkan darinya:
public class ItemConfiguration : StatusConfiguration<Item>
{
public override void Configure(EntityTypeBuilder<Item> builder)
{
base.Configure(builder); // <--
builder.ToTable("Item", "dbo").HasKey(c => c.Id);
builder.Property(c => c.Description).IsRequired().HasMaxLength(100);
}
}