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:
We can check the result in the SQL Server :
Comments
- Anonymous
June 01, 2009
PingBack from http://paidsurveyshub.info/story.php?id=73620