अगर मैं सही ढंग से समझूं, तो 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);
}
}