Mit EF Code Erste CTP 4 Ich habe ein einfaches Projekt erstellt. Dieses Projekt besteht aus 2 Klassen, von denen eine geerbt wurde.Entity Framework 4 - Code Zuerst die geerbte Tabelle nicht getrennt von der Basistabelle speichern
Ich möchte die Daten in separaten Tabellen speichern, aber der Standard von EF 4 ist, diese beiden Entitäten in derselben Tabelle abzubilden/zu speichern.
Mit .ToTable()
kann ich dieses Verhalten ändern, aber damit habe ich einen Nebeneffekt: Wenn ich ein vererbtes Objekt behalte, beharrt EF nicht die gemeinsamen Werte (z. B. Id) auf der Basisklasse.
Ich bin sicher, dass ich gehe, um einige Informationen im Mapping zu setzen, aber nicht wissen, welche.
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; }
}