- Entity Framework 4.1, Table Per Type Inheritance
- public abstract class Person
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public string Email { get; set; }
- }
- public class Employee : Person
- {
- public string Number { get; set; }
- public System.DateTime HireDate { get; set; }
- }
- public class User : Person
- {
- public string Password { get; set; }
- public bool Active { get; set; }
- }
- public class CfTestContext : DbContext
- {
- public DbSet<Employee> Employees { get; set; }
- public DbSet<User> Users { get; set; }
- public DbSet<Person> People { get; set; }
- protected override void OnModelCreating(DbModelBuilder modelBuilder)
- {
- modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
- modelBuilder.Entity<Person>().ToTable("People");
- modelBuilder.Entity<Employee>().ToTable("Employees");
- modelBuilder.Entity<User>().ToTable("Users");
- }
- }
- public class CreateCfTestDatabase : DropCreateDatabaseAlways<CfTestContext>
- {
- protected override void Seed(CfTestContext context)
- {
- // Abraham Lincoln hired as an Employee on February 12th.
- // Abraham doesn't need access as a User because he doesn't use the Purchasing application.
- context.Employees.Add(new Employee { Name = "Abraham Lincoln", Email = "abraham@microsoft.com", Number = "107124", HireDate = System.DateTime.Parse("2/12/2000") });
- // George Washington added as a User on July 4th.
- // George is a consultant, so he will never become an Employee.
- context.Users.Add(new User { Name = "George Washington", Email = "george@microsoft.com", Password = "xT76#a2", Active = true });
- context.SaveChanges();
- // Make Abraham Lincoln a User on September 29th.
- // Abraham received training and now needs to use the Purchasing application
- Employee employee = context.Employees.Where(t => t.Name == "Abraham Lincoln").FirstOrDefault();
- context.Users.Add(new User { Password = "C1x$av38", Active = true, ID = employee.ID }); // this does not produce the desired results.
- context.SaveChanges();
- base.Seed(context);
- }
- }