The goal of this post is to illustrate the inheritance concept in LINQ to SQL.
We use inheritance when we want to map a set of classes derived from the same base class with the same relational table.
Contact will be our Base Class:
[Table(Name = "Contact")]
[InheritanceMapping(Code = "Employee", Type = typeof (EmployeeContact), IsDefault = true)]
[InheritanceMapping(Code = "Company", Type = typeof(CompanyContact))]
public class Contact
public Guid Id;
public string Name;
[Column(IsDiscriminator = true)]
public string EntityType;
The InheritanceMapping attribute specify the corresponding derived class which will be identified by a special discriminator column. The Code parameter défines the value and the Type parameter défines the corresponding derived type. We have to had a field to store the discriminator value (EntityType in our sample). This field is mapped with a column which will have the value of the corresponing type.
CompanyContact and EmployeeContact derive from Contact
public class CompanyContact: Contact
public string SubName;
public class EmployeeContact:Contact
public string WebSite;
Those derived classes don’t need to have the table attribute. Because they derived from Contact class, they are mapped with same table than Contact.
The following class represents our DataContext:
public class MyDataContext : DataContext
public Table<Contact> Contacts;
public MyDataContext(string connection) : base(connection)
This script creates the correponding DataBase with two records:
We can check the result in the SQL Server :