EF 4 + CTP 5 = Code First : Conventions III

En los dos entradas anteriores sobre convenciones, I y II, se han detallado tanto el significado como la jerarquía de las mismas, así como el funcionamiento real y su relación con Data Annotations. A lo largo de esta entrada trataremos de ver como crear una nueva convención, la cual además de fines formativos tenga validez en la realidad.

 

Los antecedentes

El mapeo por defecto de una relación uno a muchos en esta CTP tiene asociada una convención por la cual este tipo de relaciones tienen establecida la restricción de borrado en cascada. Así, si por ejemplo, partiéramos del siguiente código, podríamos ver en la base de datos la opción OnDelete Cascade para la relación entre Customer y Order.

Por supuesto, esta convención de borrado en cascada para las relaciones uno a muchos puede ser eliminada por código quitando la misma de la lista de convenciones como podemos ver a continuación:

 

El problema de esta solución es que requiere de un código adicional. Además, al quitar la convención estamos eliminando esta característica de todas las posibles relaciones.. Nuestro objetivo será el de crear un atributo de Data Annotations, similar al MaxLenght que nos sirva de convención y con el cual podrámos establecer si una propiedad de navegación llevará asociada una restricción en cascada o no.

La solución

El primer paso que realizaremos será el de definir nuestro atributo, recuerde de la anterior entrada que todas las convenciones de tipo AttributeConfigurationConvention<,,> llevan asociadas un atributo, y como, además, si necesitaramos un atributo distinto a los definidos en Data Annotations podemos crear el nuestro.

 

 

Una vez creado el atributo, pasaremos a crear nuestra convención. Puesto que la misma queremos que aplique a las relaciones tendremos que seleccionar PropertyInfo y NavigationPropertyConfiguration como los dos primeros elementos de nuestro genérico. A continuación podemos ver el código de nuestra nueva convención:

Por supuesto, esta convención hay que agregarla a la lista de convenciones:

Ahora, para utilizarla simplemente tenemos que decorar nuestras propiedades de navegación como sigue:

 

Espero que os resulte de interés

Saludos

Unai

2 comentarios en “EF 4 + CTP 5 = Code First : Conventions III”

  1. Muy buenos Post, Unai, la verdad es que se agradece este tipo de material en el que se va al grano y se evita toda la literatura.

    Estoy probando la Beta 2 del ODAC de Oracle para Entity Framework y me pregunto si soportara Code First, has probado algo de esto con la Beta?

Deja un comentario

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