Below is an example of how to use table inheritance in Entity Framework. Note: All entities inherit from TableBase that contains a key value of id. Model
// Contact entity
public class Contact : TableBase
{
// contact fields
public string FirstName { get; set; }
public string LastName { get; set; }
}
// Faculty entity, inherit from contact
public class Faculty : Contact
{
public string Focus { get; set; }
}
// Studen entity, inherit from contact
public class Student : Contact
{
public int GraduationYear { get; set; }
}
Creating sample data and seeing results in SQL
public void CreateSample2()
{
// purge data
this.Database.ExecuteSqlCommand(“delete from contacts”);
this.SaveChanges();
// add faculty
Faculty.Add(new Faculty
{ FirstName = “Mike”, LastName = “Smith”, Focus = “CS” });
Faculty.Add(new Faculty
{ FirstName = “Jane”, LastName = “O’Donnell”, Focus = “Math” });
Faculty.Add(new Faculty
{ FirstName = “Matt”, LastName = “James”, Focus = “Biology” });
// add students
Students.Add(new Student
{ FirstName = “Paul”, LastName = “Jones”, GraduationYear = 2013 });
Students.Add(new Student
{ FirstName = “Jennifer”, LastName = “Allison”, GraduationYear = 2016 });
// commit
this.SaveChanges();
}
/*
select * from contacts
id FirstName LastName Focus GraduationYear Discriminator
—- ————– ————– ————– ————– ————-
1 Mike Smith CS NULL Faculty
2 Jane O’Donnell Math NULL Faculty
3 Matt James Biology NULL Faculty
4 Paul Jones NULL 2013 Student
5 Jennifer Allison NULL 2016 Student
*/
Querying data
private void selectFacultyStudents()
{
// get the db context
using (var db = new Data.Db())
{
// get a list of contacts that are faculty
var f = db.Contacts
.OfType()
.ToList();
// traverse
Console.WriteLine(“Faculty:”);
foreach (var i in f)
{
Console.WriteLine(String.Format(“{0}, {1}: {2}”, i.LastName, i.FirstName, i.Focus));
}
// get a list of contacts that are students
var s = db.Contacts
.OfType()
.ToList();
// traverse
Console.WriteLine(“Students:”);
foreach (var i in s)
{
Console.WriteLine(“{0}, {1}: {2}”, i.LastName, i.FirstName, i.GraduationYear);
}
}
}