andres

Como evitar la inicialización de bases de datos en Entity Framework

Arranco diciendo que hasta el momento Entity Framework no me termina de convencer. Entregar todas las decisiones a un tercero llamado Microsoft no es algo que me deje tranquilo. Me siento mas cómodo con ADO.NET, ya que se tiene control total de las consultas que se ejecutan en la base de datos. No obstante, reconozco los beneficios de Entity Framework. Las migraciones son, por ejemplo, un gran beneficio en arquitectura Multi – Tenant de base de datos, en donde una migración manual puede ser contraproducente. Otro “beneficio” es que uno no está tan pendiente de lo que se termina haciendo en SQL (Lo cual, como mencione, tampoco me resulta tan agradable, pero me parece aceptable en el caso de las sentencias de manipulación de datos).

Por algún  motivo hay veces que es necesario evitar la creación automática de la base de datos. En mi caso estoy con un sistema que es la migración a web de una version desktop muy rudimentaria y un factor importante es el poco tiempo que puedo dedicarle al mismo al ser un desarrollo ad-honorem pero que a la vez tiene sus plazos. Las opciones que encontré son:

  • Activar migrations y cada cambio que hago generar una migración: No me parece óptimo estando en un ambiente de desarrollo, ademas de tener la experiencia de que en otro proyecto cada vez que hacíamos deploy con una migración teníamos problemas que, para complicarlo aún más, eran fallas silenciosas. (Acá es donde en un entorno normal tendría que dedicarle tiempo a investigación, pero no lo tengo)
  • Recrear la base de datos cada vez que haga un cambio en la estructura (lo cual no me parece conveniente ya que sólo es válido para un ambiente no productivo)
  • Desactivar la creación automática, no utilizar Migrations y manejar todo desde un proyecto de base de datos (Opción elegida)

El código es muy sencillo, simplemente hay que asignarle al atributo Database de la clase DbContext de la cual heredamos un objeto del tipo “NullDatabaseInitializer”. De esta manera, evitamos que al instanciar el objeto “Context” se quiera correr la inicialización de la base de datos.

Lo importante no es el código, sino el análisis previo:  No nos casemos con las tecnologías y elijamos de cada una la que mejor se adapte a nuestras necesidades. En mi caso uso Entity Framework para tener un desarrollo más ágil, pero le quito la creación de la base de datos y no activo migrations ya que no me genera un beneficio importante.

Buen Codeo

andres

Presentación

Como una copia a Jose Ferrer de revivir sus tiempos de blog tech, se me “ocurrió” (entre comillas porque evidentemente la idea del blog es robada :P) también armar un blog. Muy pronto me encontré con la primera disyuntiva: ¿para que?. Hay muchas opciones posibles: divulgar investigaciones para que otros puedan aprovecharlas, contar el día a día de la vida de un developer (So boring…), promocionar y publicitar desarrollos propios, y una larga lista de etcéteras.

Ahora viene la parte filosófica. No se si es la crisis de los 30, pero me encuentro en este momento en un proceso de cambios personales de todo tipo en pos de mejorar a nivel general ciertos puntos que no me tienen contento. A nivel profesional (lo que a este espacio concierne) me veo en una etapa en donde quiero comenzar a organizar mis conocimientos, pulirlos y emprolijarlos. Si bien tengo bastante experiencia, en muchos temas toco de oído y siguiendo con la analogía, quiero empezar a conocer a fondo la teoría musical. Es por ello que comencé algunos cursos de “Clean Code”, a investigar Best Practices, etc. En definitiva, no creer que solo con la experiencia tengo que quedarme quieto, sino que debo volver a los libros para crecer aun mas (Casi que diría que es mi lema el constante crecimiento profesional)

Es por ello que inicio este blog con objetivos acorde a mis cambios:

  1. Documentar temas que sean de mi interés y quiera tener algún registro de ellos
  2. Documentar POCs que en algún momento investigue y no quiera que terminen perdidas en algún disco por ahí (Ya se me rompieron varios)
  3. Organizar algunos proyectos que tengo vivos (o que quisiera tenerlos).
  4. Desarrollar ideas para aplicar a proyectos.
  5. Sentirme libre de publicar OTs relacionadas al desarrollo profesional 🙂

En definitiva, este blog va a ser una especie de “Diario Intimo Profesional”. Espero que de paso a alguien le interese lo que publico y no sentirme tan solo entre estas letritas 🙂

Espero poder organizarme y dedicarle tiempo, porque en definitiva, tiempo es lo que a veces nos falta…

  • GIF: gifer.com