ईएफ कोड प्रथम सीटीपी 4 के साथ मैंने एक साधारण परियोजना बनाई है। इस परियोजना में 2 वर्ग होते हैं, जिन्हें दूसरे से विरासत में मिला है।इकाई फ्रेमवर्क 4 - कोड पहले आधार तालिका से अलग विरासत तालिका को संग्रहीत नहीं करता
मैं डेटा को अलग-अलग तालिकाओं में संग्रहीत करना चाहता हूं, लेकिन ईएफ 4 का डिफ़ॉल्ट एक ही तालिका में इन दो इकाइयों को मैप/स्टोर करना है।
.ToTable()
के साथ, मैं इस व्यवहार को बदल सकता हूं, लेकिन इसके साथ मेरा दुष्प्रभाव होता है: जब मैं एक विरासत वस्तु को जारी रखता हूं, तो ईएफ बेस क्लास पर सामान्य मानों (पूर्व आईडी) को जारी नहीं रखता है।
मुझे यकीन है कि मैपिंग में कुछ जानकारी सेट करने के लिए जा रहा हूं लेकिन मुझे नहीं पता।
static void Main(string[] args)
{
Database.SetInitializer<ZooContext>(new RecreateDatabaseIfModelChanges<ZooContext>());
using (ZooContext ctx = new ZooContext())
{
Mammal mam = new Mammal() ;
mam.NumberOfLegs = 4;
ctx.Animals.Add(mam);
// ctx.Mammals.Add(mam) as the same behavior
ctx.SaveChanges();
}
}
public class ZooContext : DbContext
{
public DbSet<Animal> Animals { get; set; }
public DbSet<Mammal> Mammals { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
modelBuilder.Entity<Animal>().HasKey(p => p.Id).
MapHierarchy().
Case<Animal>(a => new { a.Id });
modelBuilder.Entity<Animal>().HasKey(p => p.Id).
MapHierarchy().
Case<Mammal>(a => new { a.Id, a.NumberOfLegs }).ToTable("Mammals");
base.OnModelCreating(modelBuilder);
}
}
public class Animal
{
public virtual int Id { get; set; }
}
public class Mammal : Animal
{
public int NumberOfLegs { get; set; }
}