EF 4 + CTP 5 = Code First : Database III

Este es el tercero y último post dedicado a la creación y uso de las bases de datos en EF 4 + CTP 5, puede revisar las dos entradas anteriores, I y II, si desea recordar lo tratado en las mismas. En esta ocasión, trataremos de mostrar los inicializadores.

 

La clase DbDatabase, comentada ya en el anterior blog, además de elementos para establecer la factoria a utilizar y distintos métodos de ayuda nos permite establecer distintas estrategias de inicialización de nuestras bases de datos, de tal forma, que antes de crearlas o utilizarlas podamos escribir algunos pasos. Estas estrategias de inicialización pueden asignarse mediante el uso del método SetInitializer, el cual, como vemos a continuación, nos permite establecer una estrategia, definida por un contrato llamado IDatabaseInitializer<TContext>.

Este contrato de inicialización, como puede verse a continuación en un ejemplo de implementación custom, únicamente define un método, InitializeDatabase, en el cual podremos colocar el código de inicialización que necesitemos.

Estas estrategias de inicialización, como seguramente ya sabrá, son utilizadas por ellos para la generación del esquema de la base de datos o la actualización de la misma. Dentro del espacio de nombres System.Data.Entity.Database podemos encontrar las tres estrategias siguientes:

  1. CreateDatabaseIfNotExist<TContext>
  2. DropCreateDatabaseAlways<TContext>
  3. DropCreateDatabaseIfModelChanges<TContext>

Los nombres de las estrategias creo que son bastante descriptivos, por lo tanto no necesitan explicación. A continuación, en las siguientes lineas de código podemos ver como realizar la inicialización de una estrategia, por defecto no hay ninguna asignada, aunque en la documentación se sugiera que está DropCreateDatabaseIfModelChanges.

 

Buceando en el código con Reflector, una de las primeras cosas que suelo hacer siempre cuando reviso una CTP o versión preliminar, de los que la documentación es escasa, se puede ver como siempre que se asigna un elemento DbDatabase, del que ya hemos hablado, se busca en la configuración de la aplicación los inicializadores que queremos.

El código en concreto es el siguiente:

De este código uno puede extraer el formato de la especificación en configuración, personalmente lo veo demasiado ofuscado, tanto el formato como la forma de disponerlo en configuración, no obstante, me imagino que será una de las cosas que cambien. Con el fin de mostrar un ejemplo de un inicializador en configuración, las siguientes lineas muestran como asignar un inicializador de nombre CustomStrategy a un contexto de nombre CustomerContext.

Con esta tercera entrega hemos dado una vuelta a todo lo que se refiere creación/uso de bases de datos con respecto a EF 4 + CTP 5. En los siguientes post a vanzaremos en temas como el mapeo de las entidades y las convenciones.

 

Saludos

Unai

Deja un comentario

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