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

Leave a Comment

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

*
*