En esta entrada, vamos a explorar cómo configurar un nuevo proyecto en Visual Studio(VS) 2022 utilizando el enfoque Database First de Entity Framework mencionado en el hilo anterior.
Además, realizaremos algunas operaciones básicas como Agregar (Add), Eliminar (Remove) y Actualizar con un par de tablas sencillas de ejemplo. Este paso a paso está pensado para aplicar la teoría del ORM de manera práctica y concreta.
Es importante destacar que Entity Framework ofrece diferentes enfoques para trabajar con bases de datos, y este es solo uno de ellos. Algunos desarrolladores prefieren trabajar con otros entornos de desarrollo o integrar sus proyectos a través de la consola, pero lo ideal es que experimentes y encuentres el método que mejor se adapte a tu estilo de trabajo.
Herramientas necesarias
Para este ejemplo práctico, utilizaremos las siguientes herramientas:
Visual Studio 2022:
Podés descargarlo desde el sitio oficial: Descargar Visual Studio Community
Microsoft SQL Server:
Descargalo desde acá: Descargar SQL Server
Además, asegurate de tener instalada la última versión de .NET Framework en Visual Studio.
Si bien VS está diseñado para trabajar con versiones más recientes como .NET Core o .NET 6, en este ejemplo vamos a utilizar .NET Framework para dar un vistazo a las bases legacy antes de avanzar a tecnologías más modernas.
También asegurate de tener instaladas las Plantillas de proyecto adicionales para .NET Framework desde el instalador de Visual Studio por si acaso.
La versión de .NET Framework a utilizar será la 4.6. De igual forma para realizar las operaciones vamos a crear un proyecto sencillo de consola, ya que no es la intención utilizar conceptos más avanzados que extenderían demasiado la guía.
Requerimientos
Instalación de las herramientas
Existen múltiples guías en línea que te pueden ayudar a instalar Visual Studio y SQL Server. Durante la instalación de Visual Studio, seleccioná los paquetes de desarrollo necesarios para trabajar con .NET Framework y asegurate de habilitar las herramientas para trabajar con bases de datos y servicios locales.
Creación de la base de datos
Vamos a crear una base de datos sencilla mediante script, con algunos datos de prueba para nuestro ejemplo en SQL Server, con el SQL Management Studio.
Configurar un proyecto en Visual Studio
Una vez instalado VS, crearemos una solución en blanco donde alojaremos los proyectos y las bibliotecas de clase necesarias para nuestro código. Luego, generaremos las entidades del modelo directamente desde una base de datos existente siguiendo el enfoque Database First.
Conexión a SQL Server
Se requiere configurar una conexión con una base de datos local en SQL Server para generar las clases y el contexto que usaremos en el proyecto.
Operaciones Entity Framework básicas
Por último vamos a implementar un par de ejemplos prácticos de las operaciones que vimos en el hilo anterior, demostrando cómo interactuar con la base de datos utilizando el ORM.
Programación Orientada a Objetos
Antes de comenzar con la creación del proyecto, quiero hacer una breve pausa para aclarar que este contenido está dirigido a lectores que tienen algunas nociones de programación. Es decir, que entienden conceptos básicos como qué es una variable, una función o un método.
Dicho esto, vamos a hacer un breve repaso sobre un tema fundamental relacionado con uno de los paradigmas de programación más comunes: la Programación Orientada a Objetos (POO, o OOP por sus siglas en inglés, Object-Oriented Programming).
La Programación Orientada a Objetos es un paradigma que se basa en el uso de "objetos" para representar entidades del mundo real. Estos objetos se crean a partir de "clases", que funcionan como una especie de plantilla. En .NET, una clase define las propiedades y los métodos que un objeto puede tener y ejecutar, permitiendo estructurar el código de manera más organizada.
Para entender mejor qué son los métodos y las propiedades, vamos a imaginar un ejemplo sencillo: una bicicleta.
Propiedades: Las propiedades de un objeto son como sus características o atributos. Por ejemplo, una bicicleta tiene propiedades como:
Color: puede ser roja, azul, verde, etc.
Tamaño: puede ser pequeña, mediana o grande.
Número de velocidades: puede tener 1, 5, o más cambios.
Métodos: Por otro lado, los métodos representan las acciones que un objeto puede realizar.
En nuestro ejemplo, una bicicleta puede:
Frenar: detenerse cuando el ciclista lo necesita.
Acelerar: aumentar la velocidad.
Cambiar de velocidad: ajustar el nivel de esfuerzo.
Con Entity Framework, vamos a trabajar con estas clases para mapearlas a tablas en una base de datos, realizando las validaciones pertientes a cada caso y permitiendo realizar operaciones de forma estructurada.
Este concepto es la base para poder diseñar y codificar un programa desde cero, por supuesto este tema es mucho más amplio pero para lo que queremos demostrar acá es suficiente.
1. Creación de la base de datos
Para iniciar, lo primero es crear la base de datos de la cual diseñaremos los modelos con la que más adelante vamos a operar.
Enlace del repositorio:
Lo primero será descargar el script_db del enlace proporcionado y abrirlo con nuestro SQL Server Management Studio:
Acceder a File ➜ Open ➜ File y seleccionar el fichero .sql que descargamos del respositorio de Github. También podés crear un nuevo script y copiar el contenido directamente del repositorio y pegarlo en el archivo.
En un equipo con sistema operativo Windows, veríamos algo como esto:
Luego procedemos a ejecutar las sentencias con F5 o el botón de Execute(Ejecutar) en la parte superior (botón verde de play).
Podés cerciorarte de que está todo pronto ejecutando una consulta sencilla como un select a la tabla Artículos desde el mismo script.
SELECT TOP (20) * FROM [Blog_EF01].[dbo].[Articulo];
La base de datos tiene un par de tablas sencillas:
Categoría: esta será la categoría de nuestro artículo, ejemplo: útiles escolares.
Artículo: la clase que va a contener la información de nuestra entidad principal, ejemplo lápiz, goma de borrar, regla.
Cliente: tabla extra con la que si querés luego podes prácticar, simula un cliente que compraría un artículo (en el contexto literal, la lógica no la vamos a hacer acá).
Las tablas tienen algunos datos de prueba que más tarde consultaremos desde Visual Studio con Entity Framework.
2. Creando la solución en Visual Studio
Ahora con nuestro Visual Studio en ejecución, vamos a ir a Archivo ➜ Nuevo ➜ Proyecto
En el buscador, vamos a indicar a VS que nos filtre la opción "Solución en blanco" y le damos a siguiente.
Le podés dar el nombre que desees, para este ejemplo lo voy a nombrar EjemploEF.
También podés cambiar la ubicación o ruta donde van a guardarse los ficheros de la solución, para este caso podés dejar el valor predeterminado de la instalación.
Por último le damos crear.
Si querés saber la diferencia entre Solución y Proyecto, hacé click acá.
3. Agregando la Biblioteca de clases
Como somos seres civilizados y sabemos que un proyecto prolijo facilita tanto el desarrollo como el mantenimiento, vamos a comenzar organizando nuestro modelo de Entity Framework de manera adecuada.
El primer paso será agregar una Biblioteca de Clases a nuestro proyecto. Esta biblioteca será la "carpeta" de nuestro modelo y todo lo relacionado con la configuración de la base de datos. Mantener este nivel de organización no solo hace que el código sea más limpio, sino que también facilita futuras extensiones del proyecto.
La Biblioteca de Clases actúa como un contenedor dedicado exclusivamente a las entidades, configuraciones y cualquier lógica de acceso a datos. Esto mantiene la separación de responsabilidades, un principio clave para crear aplicaciones escalables y fáciles de mantener.
Para ello vamos a hacer click derecho en la Solución ➜ Agregar ➜ Nuevo Proyecto
En la ventana siguiente, escribimos "Biblioteca de clases Framework" y seleccionamos la opción tal como se muestra en pantalla, no nos sirve la opción .NET o .NET Standard, porque son para versiones superiores que no son .NET Framework.
La siguiente pantalla es muy importante ya que es donde indicaremos la versión del marco de trabajo. Por temas de mantener una mejor compatibilidad con versiones anterior de Visual Studio por si alguien aún no ha descargado la versión 2022, vamos a dejarlo en la versión .NET Framework 4.6.
Nombramos el proyecto como "Modelo" o lo que desees y damos click en crear. Corroborá los datos con la imagen a continuación:
Nota: La clase Class1.cs que genera VS de manera automática la podés borrar, no la vamos a usar. Es importante no mantener archivos que no tengan funcionalidad activa en el proyecto.
4. Instalación de Entity Framework
La instalación la podés hacer desde la consola de comandos pero para esta primera vez quisiera crear las asociaciones entre la biblioteca y EF de manera gráfica a los efectos de aprendizaje. De paso, introducimos el concepto de Administrador de Paquetes NuGet.
Damos click derecho en nuestro Modelo ➜ Administrar paquetes NuGet.
Nos movemos a la pestaña "Examinar" y en el buscador escribimos EntityFramework todo junto. La que tenga más descargas, esa es.
Dejamos la versión por defecto y le damos instalar. Van a aparecer dos confirmaciones, no te asustes, dale aceptar a ambas.
Luego de la instalación del NuGet, vamos a desplegar las Referencias del proyecto para asegurarnos que la instalación se completó de manera satisfactoria. Deberías de ver algo como esto:
5. Configurando el Modelo de Entity Framework
Esta es, quizás, una de las partes más laboriosas de la configuración, ya que requiere atención a los detalles. Ahora vamos a mapear y crear las configuraciones necesarias para que Entity Framework se conecte correctamente con la base de datos.
Vamos a hacer click derecho en nuestra biblioteca de clases Modelo ➜ Agregar ➜ Nuevo elemento.. del menú contextual.
En la siguiente pantalla vamos a seleccionar el icono con el nombre de ADO.NET Entity Data Model.
Especificamos el nombre del modelo, yo le voy a dejar un nombre genérico "EjemploEF" pero podes ponerle el que gustes, lo ideal es que transmita cierta idea del contexto que vas a manejar en tu base de datos. Como podría ser, VentasEF, LoginEF, FacturacionEF, etc.
A partir de este punto, vamos a estar utilizando el asistente para Entity Data Model de Entity Framework. Como nuestro enfoque es utilizar el diseño de Database First, vamos a seleccionar la opción que se lee como EF Designer desde base de datos.
En el paso siguiente damos un click en Nueva conexión... donde especificaremos el origen de datos como se muestra en la captura y le damos click a continuar.
La siguiente ventana contiene detalles específicos del servidor SQL, el tipo de autenticación y es donde especificaremos el nombre de la base de datos que creamos con nuestro script.
En donde dice nombre de servidor, probá escribir simplemente un . (punto) pero tené presente que si le especificaste un nombre en particular a tu servidor SQL esta parte puede variar un poco. En lo general con un punto es suficiente, pero sino probá escribir el nombre de tu equipo, es decir, el "hostname".
El tipo de autenticación que vamos a dejar para el ejemplo será el de Windows.
Dejamos seleccionado el checkbox de Confiar en el certificado de servidor y en el apartado siguiente "Seleccionar o escirbir el nombre de la base de datos" ya tendrías que poder ver listada la base de datos. Si no hiciste ningún cambio adicional, el nombre es Blog_EF01.
Nota: Adicionalmente, podés probar la conectividad con el botón de Probar conexión.
Luego de darle a aceptar, tendríamos que acceder automáticamente a la pantalla inicial donde veremos ahora la cadena de conexión del EF y además el nombre del contexto de datos que nos sugiere el asistente:
Si llegaste hasta acá y todo salió bien, deberías de poder ver las tablas en la pantalla siguiente. Como no vamos a tabajar con procedimientos almacenados y solo veremos algunos ejemplos básicos para el uso de EF, le marcamos las tablas que importamos desde la base de datos y le damos finalizar.
El checkbox "Incluir columnas de clave externa en el modelo" determina si las columnas que representan claves externas (FK o foreign keys) en las tablas de la base de datos se incluirán como propiedades individuales en las clases generadas por Entity Framework. Vamos a destildar esa opción ya que nos puede generar redundancias en el modelo y en lo que vamos a ganar ventaja será con las propiedades de navegación. Además, cuando existen redundancias en nuestro modeo se hace incompatible la serialización, concepto que veremos en otra entrada probablemente.
Avanzamos con la advertencia de seguridad (puede aparecer múltiples veces, no te preocupes) y ahora ya tenemos configurado nuestro modelo de datos. Deberías de poder ver el diagrama .edmx que refleja las relaciones entre las entidades y las propiedades de navegación.
Las propiedades de navegación son atributos de las entidades que permiten acceder a otras entidades relacionadas en el modelo. Por ejemplo, si una entidad Articulo tiene una relación con Categoria, una propiedad de navegación como Categoria te va a permitir acceder directamente a los datos de la categoría asociada al artículo.
Estas propiedades son esenciales para trabajar con relaciones entre tablas en Entity Framework de manera sencilla y orientada a objetos, sin necesidad de escribir consultas SQL directamente.
Felicidades por llegar hasta acá. Si llegaste a este punto, significa que hemos logrado preparar la base de nuestro proyecto utilizando Entity Framework. Este es un paso crucial que nos permitirá construir las siguientes funcionalidades en el próximo apartado.
Debido a la extensión del tema y para que sea más fácil de seguir, decidí dividir este post en dos partes. En la segunda parte continuaremos con el desarrollo y abordaremos los pasos finales para completar nuestro proyecto.