Welcome to MSDN Blogs Sign in | Join | Help

.net ready !!!

        Maxime Lamure
          MCS France
Basis of LINQ to SQL: Entity Inheritance

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
{
     [Column(IsDbGenerated=true,IsPrimaryKey=true)]
     public Guid Id;

     [Column]
     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
{
     [Column]
     public string SubName;
}

public class EmployeeContact:Contact
{
     [Column]
     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:

image

We can check the result in the SQL Server :

clip_image002[4]

Posted: Monday, June 02, 2008 11:02 PM by Maxime LAMURE
Filed under:
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker