Ir al contenido principal

Creando un Proyecto con Entity Framework - Parte 1

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 ArchivoNuevoProyecto


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 ➜ AgregarNuevo 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 ModeloAgregar 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.

Otros artículos

Principio de Responsabilidad Única (SRP) – SOLID explicado con ejemplos

Introducción a S.O.L.I.D En esta entrada, intentaremos abordar un nuevo ciclo de conceptos que tienen que ver sobre los principios SOLID , que son fundamentales en la programación orientada a objetos o POO . Estos principios fueron formulados, en principio, por Robert C. Martin , también conocido como " Uncle Bob ", con el objetivo de mejorar la mantenibilidad y escalabilidad del código de software. SOLID es un acrónimo que representa cinco principios de diseño: Single Responsibility Principle (SRP) – Principio de Responsabilidad Única Open/Closed Principle (OCP) – Principio de Abierto/Cerrado Liskov Substitution Principle (LSP ) – Principio de Sustitución de Liskov Interface Segregation Principle (ISP) – Principio de Segregación de Interfaces Dependency Inversion Principle (DIP) – Principio de Inversión de Dependencias Estos principios nos ayudan a crear software más ...

Open/Closed Principle (OCP) – SOLID explicado con ejemplos

Continuando con el repaso de los principios de S.O.L.I.D. que inició en el hilo anterior - si no lo viste hacé click acá  Principio de Responsabilidad Única (SRP) - vamos a ver el segundo en orden de aparición: Principio de Abierto/Cerrado (OCP por sus siglas en inglés). Definición Formal El principio OCP (Open/Closed Principle) establece que el código de una clase o un módulo debe estar abierto para la extensión, pero cerrado para la modificación. Esto significa que no se deben realizar cambios en el código existente cuando se requiere alterar alguna funcionalidad. En lugar de modificar el código existente, se debe crear una nueva implementación que extienda la funcionalidad. La única excepción a esto son los arreglos de bugs, donde está permitido modificar el código existente. Si se desea introducir una nueva funcionalidad, como la ordenación en un método existente, en lugar de modificar el código, se crearía una nueva implementación q...

Roadmap para Desarrolladores Backend en .NET en 2025

El mundo del desarrollo backend está en constante evolución, y mantenerse actualizado con las mejores prácticas y tecnologías es clave para seguir siendo competitivo en el mercado. Si estás buscando una guía clara y estructurada para mejorar tus habilidades en . NET backend , el sitio roadmap.sh ofrece un excelente punto de partida. Para esta entrada vamos a explorar lo siguiente: ¿Qué es roadmap.sh y por qué es relevante? El roadmap backend para .NET en 2025 Tecnologías y habilidades esenciales para backend a considerar ¿Qué es roadmap.sh y quién lo creó? roadmap.sh es una plataforma ampliamente reconocida dentro de la comunidad de desarrolladores. Fue creada por Kamran Ahmed, un Google Developer Expert y contribuidor en múltiples proyectos de código abierto. Desde su lanzamiento, la plataforma ha crecido exponencialmente, acumulando más de 300,000 estrellas en GitHub y una comunidad activa de...

Codewars

Como algunos ya saben, soy un gran entusiasta de las plataformas en línea dedicadas a la educación y al entrenamiento de habilidades, lo que podríamos llamar "gimnasios mentales". Hoy quiero presentarles, o tal vez recordarles, una de mis favoritas: Codewars, conocida también como " Guerras de Código " en español. Si aún no la conocían, los invito a explorarla. Y si ya la conocían, este es un buen momento para redescubrirla y sacarle más provecho. ¿Qué es Codewars? Codewars es una plataforma educativa en línea diseñada como un juego para entrenar habilitades de programación. fue fundada en noviembre de 2012 por Nathan Doctor y Jake Hoffner . La idea surgió durante una competencia de Startup Weekend ese mismo año, donde desarrollaron un prototipo que obtuvo el primer lugar. En la actualidad, Codewars es propiedad de Qualified , una empresa tecnológica que ofrece una plataforma para evaluar y entrenar habilidades en ingeniería de software. Con esta herramienta pod...

Principio de Sustitución de Liskov (LSP) – SOLID explicado con ejemplos

¿Qué es el Principio de Sustitución de Liskov? Imaginá que tenés un control remoto universal diseñado para funcionar con cualquier televisor. Si un nuevo modelo de TV no responde a los mismos comandos, el control deja de ser útil. El Principio de Sustitución de Liskov es como una garantía de que cualquier 'televisor' (o clase derivada) va a funcionar correctamente con el 'control remoto' (o clase base). El Principio de Sustitución de Liskov ( LSP ) es el tercer principio de SOLID , representado por la letra L y establece que: Los objetos de una clase derivada deben poder sustituir a los objetos de su clase base sin afectar el comportamiento correcto del programa. En otras palabras, si una clase hija hereda de una clase padre, cualquier instancia de la clase hija debería poder usarse en lugar de una instancia de la clase padre sin alterar la funcionalidad esperada. ¿Quién es Bárbara Liskov? Bárbara Liskov es una destacada científi...

Principio de Segregación de Interfaces (ISP) – SOLID explicado con ejemplos

El Principio de Segregación de Interfaces es otro de los principios SOLID y establece que: Una clase no debería verse obligada a depender de métodos que no utiliza .  En otras palabras, en lugar de crear una interfaz grande con muchos métodos, es mejor dividirla (segregar) en interfaces más pequeñas y específicas. Pero.. ¿Por qué? Obliga a implementar métodos innecesarios Si una clase solo necesita una "parte" de la funcionalidad de una interfaz, pero esta interfaz es muy grande, se va a ver obligada a implementar métodos que no usa. Esto es casi que inevitable si no buscamos la manera de separar mejor las responsabilidades. Imaginemos una interfaz IVehiculo que tiene los siguientes métodos: public interface IVehiculo { void Conducir () ; void Volar () ; void Navegar () ; } Si una clase Auto implementa esta interfaz, se ve obligado a definir métodos como Volar() o Navegar() , aunque un auto no vuela ni navega. public c...