अगर मैं सही ढंग से समझूं, तो Status केवल एक आधार वर्ग है, न कि आधार इकाई डेटाबेस विरासत में भाग लेना।
ऐसे मामले में यह महत्वपूर्ण है कि कभी भी Status का संदर्भ न लें सीधे इकाई मॉडल और कॉन्फ़िगरेशन के अंदर वर्ग, यानी कोई DbSet<Status> . नहीं , प्रकार का कोई नेविगेशन गुण नहीं Status या ICollection<Status> , नहीं modelBuilder.Entity<Status>() कॉल और नहीं IEntityTypeConfiguration<Status> ।
इसके बजाय, आपको हमेशा Status . से विरासत में मिले ठोस प्रकारों का उल्लेख करना होगा . कॉन्फ़िगरेशन कोड का पुन:उपयोग करने के लिए, आपको प्रतिबंधित जेनेरिक . का उपयोग करना चाहिए विधियों या वर्गों और ठोस इकाई प्रकारों को पास करें।
चूंकि आप IEntityTypeConfiguration का उपयोग कर रहे हैं आपके StatusConfiguration . बनाने के लिए शायद सबसे स्वाभाविक है कक्षाएं, सामान्य वर्ग:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
और व्युत्पन्न इकाई विन्यास वर्गों को इससे प्राप्त होने दें:
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);
}
}