EF 4 + CTP 5 = Code First : Mapping I

En el post sobre la publicación de mi último libro, relacionado con ADO.NET EF 4, un compañero de comunidad Eduard Tomás, me hizo algunos comentarios acerca de la CTP 5 y lo que el consideraba que era realmente de interés. La verdad, es que los primeros 6 post sobre esta CTP 5 distaban un poco de lo que el recomendaba, por eso, aunque la verdad no tenía pensado escribir en exceso sobre esto he decidido al final hacerlo. Esta, y posteriores entradas se dedicarán a diferentes escenarios de mapeo de entidades. Empezaremos por la herencia, intentando mostrar las técnicas habituales y como se pueden representar estas dentro de un modelo relacional.

Herencia TPT

Para mostrar un ejemplo de herencia TPT partiremos del siguiente ejemplo, trivial por otra parte, de modelo de entidades:

Una vez que ya tenemos definida nuestra jerarquía, para realizar el mapeo TPT, que como ya sabrá consiste en disponer una tabla con los elementos comunes  y una tabla por cada uno de los tipos de la misma, solamente tendremos que especificar lo siguiente nuestro código de mapeo.

 

Por supuesto, de la misma forma que hemos hecho el mapeo en código también lo podemos hacer mediante atributos y las respectivas convenciones de las que hemos hablado en entradas anteriores. A continuación, vemos como usar el atributo Table para especificar la tabla a la que se tiene que mapear cada entidad.

Nota: En estos dos ejemplos la clave primaria de Product es de tipo identidad. Por defecto todas las claves de tipo entero llevan asociada la convención StoreGeneratedIdentityKeyConvention. Si no desea este comportamiento puede usar el atributo DatabaseGeneration o bien especificar en el mapeo de esta propiedad que se elimine este patrón de Identidad. A continuación se muestran tips para estas dos formas:

 

Herencia TPC

 

TPC al contrario que TPT no dispone los datos comunes de una jerarquía dentro de una tabla, en este caso, cada una de las tablas asociadas a la jerarquía contiene también los datos comunes. Este tipo de estrategias suelen dar mejor resultado cuando se consulta más habitualmente los datos especificos de las entidades que los comunes a un conjunto de ellas, puesto que se evita el join que hay que realizar en TPH.

 

Puesto que no hay datos comunes, entonces nuestra entidad Product, más arriba ahora no tendrá una materialización, por lo tanto la macaremos como abstract. Una vez hecho esto, mostramos como realizar la configuración de esta herencia.

 

Herencia TPH

 

Para TPH, herencia con un discriminador y una sola tabla, el mapeo es realmente sencillo. Por supuesto, sin necesidad de tener que incluir el discriminador dentro de nuestras entidades, algo que no es parte de las mismas. Partiendo del mismo ejemplo de entidades que en TPT, el mapeo se podría hacer de la siguiente forma:

 

NOTA: Fíjese que el nombre del discriminador es ProductType, elemento que no aparece en las entidades pero si se generara dentro de la tabla resultante.

 

Saludos

Unai

Un comentario sobre “EF 4 + CTP 5 = Code First : Mapping I”

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *