Nếu tôi hiểu đúng, thì Status
chỉ là một lớp cơ sở và không phải là một thực thể cơ sở tham gia Kế thừa cơ sở dữ liệu.
Trong trường hợp như vậy, điều quan trọng là không bao giờ tham khảo Status
lớp trực tiếp bên trong cấu hình và mô hình thực thể, tức là không có DbSet<Status>
, không có thuộc tính điều hướng của loại Status
hoặc ICollection<Status>
, không có modelBuilder.Entity<Status>()
cuộc gọi và không có IEntityTypeConfiguration<Status>
.
Thay vào đó, bạn luôn phải tham khảo các kiểu cụ thể kế thừa từ Status
. Để sử dụng lại mã cấu hình, bạn nên sử dụng chung chung bị ràng buộc các phương thức hoặc lớp và chuyển các kiểu thực thể cụ thể.
Vì bạn đang sử dụng IEntityTypeConfiguration
, có lẽ tự nhiên nhất là tạo StatusConfiguration
của bạn chung lớp:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
và cho phép các lớp cấu hình thực thể dẫn xuất từ nó:
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);
}
}