Entity Framework: Database First | Mi Experiencia

Saludos, recien me enfrasco en una nueva aventura de desarrollo en el mundo web y he decidido usar Entity Framework y pues quise escribir una entrada sobre mi experiencia usandolo en el enfoque Database First.

Que es Database First?

Es el método que nos permite primero crear la base de datos con sus tablas (y otras estructuras) y luego incorporarlas a la aplicación. Esto es necesario cuando la aplicación que realizamos necesita utilizar una base de datos existente. Otro uso que podemos darle es cuando necesitamos crear la base de datos, pero nos es más cómodo realizar la definición de las estructuras de la base de datos directamente con sentencias SQL, y luego importar los resultados en la aplicación (lo cual en muchos casos es muy útil y necesario, ya que nos permite definir las estructuras SQL tal cual las queremos o las necesitamos) y poder aplicar al 100% todos los tips y orientaciones que podemos encontrar en este blog Base de Datos con SQL Server . Cuando hablamos que podemos crear otras estructuras nos referimos a procedimientos almacenados, funciones, vistas etc…

Una vez sabemos esto vamos a ponerlo en práctica para ello vamos a crear una pequeña base de datos de ejemplo de “estudiantes” la vamos a crear en SQL Server. Las tablas generadas serán:

  • Estudiante
  • Notas
  • Materia

Si eres nuevo y no sabes como crear una base de datos te recomiendo el siguiente video —-> aqui

Para implementar el Database First en nuestra aplicación es muy sencillo, lo primero que vamos a hacer es agregar el archivo de Entity Framework a nuestra aplicación. En este caso particular lo haré en un nuevo proyecto de tipo “Biblioteca de clases”, de forma que quede separada la gestión de los datos de lo que es la aplicación Web en sí (esto implica agregar una referencia desde el proyecto Web al nuevo que estamos creando).

Lo siguiente que haremos es que  agregamos un nuevo elemento de tipo “ADO.NET Entity Data Model”, como se muestra en la imagen. En este caso lo nombraremos EstudiantesDataContext.

 

Una vez que presionemos “Agregar”, seleccionamos la opción “Generar desde la base de datos”. En un caso normal, no deberíamos tener la cadena de conexión configurada en nuestra aplicación, por lo que daremos click en “Nueva conexión…”

Como se ve en la pantalla anterior, debemos ingresar el nombre del servidor, datos de autenticación en caso de que sean necesarios y la base de datos que queremos utilizar. Una vez que presionamos “Aceptar” tendremos la confirmación de la cadena de conexión a utilizar.

El siguiente paso  es seleccionar las estructuras de SQL que queremos incluir en nuestra aplicación. Para incluirlas, solo debemos seleccionar el check correspondiente.
Si trabajamos con nombres de tablas en ingles (este no es el caso del ejemplo), el asistente nos ofrece la opción de poner los nombres de las clases en singular, aunque la tabla esté en plural permitiéndonos que el código resultante quede mucho más limpio y representativo de lo que se está modelando con el mismo.

Al presionar “Aceptar” de esa ventana se hará el mapeo de las estructuras en el DataContext. Para nuestro ejemplo el resultado es el siguiente:

Una vez realizado esto ya podremos utilizar estas clases contenidas en el DataContext. Esto nos permitirá interactuar directamente con nuestra base de datos. Una de las grandes ventajas que presenta este enfoque es la facilidad de mantenimiento que ofrece. En caso de que haya algún cambio en las estructuras, solo debemos abrir el archivo del DataContext (con extensión edmx), hacer click derecho sobre una zona sin clases y seleccionar la opción “Actualizar modelo desde base de datos…”. Allí nos aparecerá una ventana idéntica a la de que usamos cuando agregamos las estructuras en primer término, pudiendo seleccionar que clases actualizar (tanto porque sean nuevas las tablas, se hayan modificado columnas, o se haya eliminado la tabla):

Estos son los pasos necesarios a seguir para implementar esta técnica.

Opinion personal

Como opinión personal, es recomendable para cualquier tipo de proyectos ya que permite definir nuestras tablas (u otras estructuras) en el motor de base de datos y luego importarlas de forma sencilla. Generalmente este es un orden lógico de trabajo cuando comenzamos una nueva aplicación no ir a escribir codigo directamente.
En los proyectos pequeños no tiene desventajas, ya que no requiere mucho tiempo para implementarlo. Y en los proyectos grandes mantiene el orden, ya que distintas personas harán modificaciones simultáneas en la base de datos, las cuales cada uno importará en el DataContext cuando sea necesario y fácilmente puedes integrar a tu equipo un experto en bases de datos al desarrollo del proyecto.

Algunas diferencias entre Char, Varchar, NChar y NVarchar en SQL Server

Esta semana paseandome por grupos de facebook, me llamo la entencion una discusion acerca del uso de estos tipos de datos, al ver como un usuario alardeaba de usar nchar al parecer porque le resulta mas divertido pulsar la tecla N, asi que  decidi escribir una entrada para el blog sobre ello.

 

 

 

 

 

¿Cuál es la diferencia , y que tan importante es la diferencia?

Char y NChar 

Cuando configuramos un campo de tipo Char o NChar, estamos indicando campos de tamaño fijo. Es Decir, si configuramos una tabla de la siguiente forma:

CREATE TABLE nombre_tabla
(
Campo1 char(10),
Campo2 nchar(10)
)

Campo1 Char(10), Campo2 NChar(10)

La diferencia entre Char y NChar es el soporte a carácteres Unicode “los carácteres Unicode ocupan más de 1 byte”. Por este motivo a la hora de almacenar algún valor, en el Campo1 siempre ocupará 10 bytes y en el Campo2 20 Bytes.

En este caso NChar es el que soporta Unicode.

Pero diras alto !! ahi vaquero, porque Campo2 seran 20 Bytes, esta es la formula usada para calcular el tamaño, la longitud x 2 , es decir 10 * 2 = 20 Bytes.

Varchar y Nvarchar

VARCHAR es la abreviación de variable-length character string y almacena 8,000 caracteres.   Es una cadena de caracteres de texto que puede ser tan grande como el tamaño de página para la tabla de la base de datos. Los campos de tipo Varchar o NVarchar son de almacenamiento variable. 

El tamaño almacenado dependerá del valor que se quiere guardar, el número de caracteres sólo configura el tamaño máximo que este campo puede almacenar.

Configuramos una tabla de la siguiente forma:

CREATE TABLE nombre_tabla
(
Campo1 varchar(10),
Campo2 nchar(10)
)

El tamaño almacenado dependerá del valor que se quiere guardar, el número de caracteres sólo configura el tamaño máximo que este campo puede almacenar.

En el caso del Campo1 el tamaño máximo será de 10 bytes, y en el caso del Campo2 el tamaño máximo será de 20 bytes.

El tamaño máximo de un VARCHAR es 8000 caracateres.

La “N” en NVARCHAR significa uNicode. Esencialmente, NVARCHAR no es más que un VARCHAR que soporta caracteres de dos bytes.  Lo que representara una longitud máxima de 4000 caracteres. Lo que significa tener la capacidad de almacenar caracteres especiales en este tipo de datos.

Y para que sirve Unicode? Si la columna donde almacenamos el texto es Unicode quiere decir que no tendremos problemas para guardar y recuperar caracteres que se usan en otros idiomas como el español (á é í ó ú ñ), pero con el español los problemas de visualización no son muy frecuentes, con el resto de idiomas es el problema (como el chino o japonés).

 

Unicode o No Unicode

Dependiendo de la información que queremos almacenar en nuestra base de datos, tendremos que definir si permitimos o no valores Unicode (Por ejemplo diferentes idiomas como el Ruso, Japonés, chino, …). Existen tablas de codificación de caracteres (Encodings) que poseen carácteres específicos de Doble Byte. Esto puede afectarnos a la hora de utilizar campos de tipo Char o Varchar, ya que un texto de 10 carácteres podría superar los 10 bytes, haciendo imposible la insercción del valor a la base de datos.

Resumen: En esta entrada aprendimos algunas diferencias entre Char, Varchar, NChar y NVarchar en SQL Server, si conoces alguna dejanos saber en los comentarios.

Si te ha gustado esta Entrada, por favor, compartir y dejar su comentario a continuación.Si tienes alguna pregunta, no dude en enviar aquí. Voy a responder a todas las preguntas ! :).