En el último post acerca de le herencia en Entity Framework 4 y Code Only, vamos a ver la estrategia de Table per concrete Class (TPC).
La diferencia con las estrategias de los ejemplos anteriores: Table per Hierarchy y Table per Type es que, en este caso, la clase base no tiene ningún tipo de representación en las base de datos y sólo tiene sentido a nivel de clases del modelo.
A continuación vemos como tenemos definido una tabla por subtipo:
Ahora vamos a definir los mapeos de la base de datos con nuestras clases.
Para el subtipo Book:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class BooksTpCConfiguration : EntityConfiguration<Book>
{
public BooksTpCConfiguration()
{
this
.HasKey(b => b.Id)
.MapSingleType(
b => new
{
Id = b.Id,
Name = b.Name,
Price = b.Price,
Pages = b.PageNumber,
Author = b.Author
}
)
.ToTable("BooksTpC");
}
}
Para el subtipo
Television:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class TelevisionsTpCConfiguration : EntityConfiguration<Television>
{
public TelevisionsTpCConfiguration()
{
this
.HasKey(t => t.Id)
.MapSingleType(
t => new
{
Id = t.Id,
Name = t.Name,
Price = t.Price,
Size = t.Size,
Brand = t.Brand,
}
)
.ToTable("TelevisionsTpC");
}
}
Para el subtipo Shirt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ShirtsTpCConfiguration : EntityConfiguration<Shirt>
{
public ShirtsTpCConfiguration()
{
this
.HasKey(s => s.Id)
.MapSingleType(
s => new
{
Id = s.Id,
Name = s.Name,
Price = s.Price,
Colour = s.Colour,
Size = s.Size,
}
)
.ToTable("ShirtsTpC");
}
}
Vemos que mediante la expresión MapSingleType cada clase mapea las propiedades propias del subtipo y de la clase base.
Para crear las instancias a las que añadimos nuestros objetos utilizaremos una clase que herede de ObjectContext. En ella definimos sólo los subtipos: