Entity Framework 4 CodeOnly – Table per concrete Class (TPC)

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:

TablaTpC

Ahora vamos a definir los mapeos de la base de datos con nuestras clases.  

Para el subtipo Book:

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");
    }
}

(more…)

Read More

Entity Framework 4 CodeOnly – Table per Type (TPT)

En el post anterior vimos el tipo de herencia Table per Hierarchy (TPH).  

Ahora vamos a ver el tipo de herencia en que el tipo base se guarda en una tabla compartida, es lo que llamamos Table per Type (TPT).  

En el ejemplo que estamos siguiendo (intro), nuestra clase base Product se guardará en la tabla ProductsTpT que tiene las propiedades de la propia clase base y luego tendremos una tabla por cada subtipo: ShirtsTpT, BooksTpT y TelevisionsTpT como podemos ver a continuación:  

TablaTpT

Ahora vamos a definir los mapeos de la base de datos con nuestras clases.  

Para la clase base Product:  

public class ProductsTpTConfiguration : EntityConfiguration<Product>
{
    public ProductsTpTConfiguration()
    {
        this

            .HasKey(p => p.Id)
            .MapHierarchy(
                p => new
                {
                    ProductId = p.Id,
                    ProductName = p.Name,
                    ProductPrice = p.Price
                }
            )
            .ToTable("ProductsTpT");
    }
}

(more…)

Read More

Entity Framework 4 CodeOnly – Table per Hierarchy (TPH)

En mi post anterior hice una introducción a EF4 CodeOnly. A continuación entraremos en detalle con el tipo de herencia de TPH:

En TPH, utilizamos una tabla para guardar todos los datos de la jerarquía y mediante una columna que actúa como discriminador determinamos el tipo concreto de la fila y que columnas debemos leer.

La tabla de la base de datos es la siguiente:

TablaTpH

La columna que actúa como discriminador es ProductType y será ‘S’ para el tipo Shirt, ‘T’ para Television y ‘B’ para Book.

(more…)

Read More

Entity Framework 4 CodeOnly – Introducción

Entity Framework 4.0 nos ofrece varias formas de generar nuestro modelo, la primera, y que ya existía en la primera versión del producto, era generar el modelo a partir de la base de datos. Esto nos obligaba a empezar diseñando la base de datos para luego generar nuestras clases, lo cual no es lo deseable.

Una segunda opción es el llamado model-first, en que primero diseñamos nuestras clases del dominio y a partir de plantillas T4 y WF – ya sea las plantillas que trae por defecto o unas creadas por nosotros mismos – nos permite generar el script para crear la base de datos. Esta opción, aun siendo mejor que la anterior no da lugar a mucho juego.

Si realmente lo que queremos es total flexibilidad y no usar ni el diseñador ni pelearnos con el xml del fichero *.edmx, podemos obtener la funcionalidad que necesitamos mediante el uso de la librería Microsoft.Data.Entity.CTP y disponible aquí. Como podéis deducir por el nombre aun se encuentra en fase CTP pero ya podemos realizar bastantes cosas interesantes. Para los que hayan trabajado con nHibernate, CodeOnly es la alternativa a Fluent nHibernate.

(more…)

Read More