EF 4 + CTP 5 = Code First : Conventions I

Si buscamos en la RAE la definición de una convención  podremos ver como esta se puede definir como “Norma o práctica admitida tácitamente, que responde a precedentes o a la constumbre” así como “Ajuste y concierto entre dos personas o entidades”. En nuestro contexto, podríamos decir que una convención es una norma por defecto gracias a la cual no tendremos que realizar ciertas configuraciones de mapeo para nuestras entidades.

Si partiéramos de un ejemplo tan sencillo como el siguiente, y en el utilizaramos nuestro contexto o bien inicializaramos la base de datos con una llamada a CustomerContext.Database.CreateIfNotExist() podríamos ver como, sin necesidad de especificar configuración ninguna, se ha extraido el esquema de la base de datos.

 

Concrétamente, a patir de esta entidad Customer el esquema de la tabla generada es:

CREATE TABLE [dbo].[Customers](
    [CustomerId] [int] IDENTITY(1,1) NOT NULL,
    [FirstName] [nvarchar](4000) NULL,
    [LastName] [nvarchar](4000) NULL,
PRIMARY KEY CLUSTERED
(
    [CustomerId] ASC
)

Como habrá observado, EF ha interpretado que la propiedad CustomerId tiene que ser la clave primaria de la tabla a generar. Esto, es una convención, concretamente una convención que dice que si hay una propiedad igual al nombre de la clase pero terminada en Id o bien una propiedad de nombre Id esta será la clave primaria, otra convención especifica que si es de tipo entero la misma debe de establecerse como Identity. El nombre de la tabla también es una convención, que dice que se obtiene de pluralizar el nombre de la entidad. Y  así, más convenciones que podríamos seguir extrayendo de este sencillo ejemplo.

En esta CTP, la quinta ya, las convenciones está definidas por una jerarquía de subclases que implementan un contrato común de nombre IConvention, la simple definición de este contrato lo vemos en el siguiente fragmento de código

Debajo de IConvention, en ocasiones en varios niveles de jerarquía, tenemos los elementos que más nos importan a nosotros, concretamente AttributeConfigurationConvention, IDbConvention y IEdmConvention, puesto que estos  representan los contratos reales con los que se han implementado las distintas convenciones.

 

Antes de avanzar más profundamente en las convenciones, algo que haremos en siguientes entradas a esta, veremos como ver/modificar las convenciones que por defecto tenemos incluidas en cualquier elemento de tipo DbContext.

  

Si vieramos la salida de pantalla de un uso de CustomerContext podríamos observar las diferentes convenciones que tenemos incluidas por defecto.

 

Untitled

Por supuesto, esta colección de convenciones puede ser modificada, quitar convenciones que no deseamos o bien agregar nuevas convenciones. En el siguiente ejemplo de código eliminamos una convención que marca para las relaciones OneToMany la restricción en cascada para el borrado, llamada OneToManyCascadeDeleteConvention.

 

Hasta aquí hemos llegado con la primera parte de las convenciones, en posteriores capítulos hablaremos más profundamente sobre las mismas, viendo como se han creado asi como la manera de crear nuevas convecciones.

 

Saludos

Unai

Deja un comentario

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