Wednesday, June 6, 2012

Entity Framework with Inheritance

In Entity Framework(EF) code-first approach, there are three types of methods to handle the inheritance hierarchy.
  • Table per Hierarchy (TPH)
  • Table per Type (TPT)
  • Table per Concrete Class (TPC)
By default EF use TPH approach.

Table per Hierarchy (TPH)

In TPH, All data in the hierarchy will be saved in a single table. It uses Discriminator column to identify which record belongs to which sub type. Value of this column is the name of the sub type.

In the below sample I have a base class called Vehicle. Car and Bicycle classes are inherited from the Vehicle class. SportsCar class is inherited from the Car class.
According to the above class structure the database table design will be look like below. The Discriminator column will be added automatically through the EF.
After add some data, it'll be look like below. The value of the Discriminator column will be the name of the sub type.

Table per Type (TPT)

In TPT, EF will create table for each type. In this approach inheritance relationships are represented as Relational Foreign Key Associations.
The table for sub classes contains only the non-inherited properties along with the primary key. Primary key of each sub class is a foreign key for the base class.
To do this we can override the OnModelCreating method of DbContext and write some fluent API code.
The design of the tables will be as follow.


After add some data, it'll be like,

Table per Concrete Class (TPC)

In TPC, for each class, the EF will create a table. So all the properties and all the inherited properties will be mapped to the each table.
To do this we can override the OnModelCreating method of DbContext and write some fluent API code.
After add some data, tables'll be like.

No comments:

Post a Comment