Cuando creamos aplicaciones empresariales respaldadas por bases de datos, generalmente queremos aislar nuestros modelos de entidad, DbContext y la lógica para la inicialización y migración de bases de datos para mantener una arquitectura limpia. Podemos hacer esto aprovechando el enfoque Code First en Entity Framework Core.
Este artículo presenta una discusión del enfoque Code First en EF Core con ejemplos de código para ilustrar los conceptos. Para utilizar los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2022 instalado en su sistema. Si aún no tienes una copia, puedes descargue Visual Studio 2022 aquí.
Cree un proyecto de API web ASP.NET Core en Visual Studio
Para crear un proyecto de API web ASP.NET Core en Visual Studio 2022, siga los pasos que se describen a continuación.
- Inicie el IDE de Visual Studio 2022.
- Haga clic en «Crear nuevo proyecto».
- En la ventana «Crear nuevo proyecto», seleccione «ASP.NET Core Web API» de la lista de plantillas que se muestran.
- Haga clic en Siguiente.
- En la ventana «Configura tu nuevo proyecto», especifica el nombre y la ubicación del nuevo proyecto.
- Opcionalmente, marque la casilla de verificación «Colocar solución y proyecto en el mismo directorio», según sus preferencias.
- Haga clic en Siguiente.
- En la ventana «Información adicional» que se muestra a continuación, seleccione «.NET 8.0 (soporte a largo plazo)» como versión del marco y asegúrese de que la casilla «Usar controladores» esté marcada. No utilizaremos API mínimas en este proyecto.
- En otra parte de la ventana «Información adicional», deje «Tipo de autenticación» configurado en «Ninguno» (el valor predeterminado) y asegúrese de que las casillas de verificación «Habilitar soporte de API abierta», «Configurar para HTTPS» y «Habilitar Docker» permanezcan sin marcar. No utilizaremos ninguna de esas funciones aquí.
- Haga clic en Crear.
Usaremos este proyecto de API web ASP.NET Core para trabajar con EF Core y el enfoque Code First en las secciones siguientes.
Crear un modelo de entidad en EF Core
EF Core de Microsoft es un asignador de bases de datos de objetos que simplifica el acceso a datos para aplicaciones .NET Core. EF Core funciona con bases de datos relacionales, bases de datos no relacionales e incluso bases de datos en memoria, y nos permite escribir código para realizar operaciones CRUD (crear, leer, actualizar, eliminar) que utilizan objetos .NET. Al usar EF Core, no tenemos que interactuar directamente con el proveedor de la base de datos subyacente.
EF Core admite tres enfoques diferentes para crear el modelo de entidad: Code First, Model First y Database First.
El enfoque Code First en EF Core
En el enfoque Code First, el modelo de entidad se define utilizando código sin ningún esquema de base de datos preexistente. Los desarrolladores escriben clases de dominio y configuran el mapeo entre esas clases y la base de datos utilizando atributos, API fluidas o convenciones. Luego, EF Core crea el esquema de la base de datos según el modelo definido por código. El enfoque Code First le permite expresar relaciones complejas utilizando código. A menudo se prefiere cuando el esquema de la base de datos no está disponible.
El enfoque Model First en EF Core
En el enfoque Model First, el modelo de entidad se diseña utilizando una herramienta de diseño visual, como Entity Framework Designer en Visual Studio. Con el diseñador, los desarrolladores pueden crear visualmente entidades, relaciones y otros aspectos de un modelo de datos sin escribir una sola línea de código. Una vez que haya definido el modelo, EF Core genera el código, incluidas las clases de entidad y las configuraciones de asignación. Posteriormente podrá ampliar el código para agregar lógica empresarial o personalizaciones según corresponda. Model First puede ser beneficioso cuando personas que no son desarrolladores participan en la definición del modelo de datos o cuando es necesario realizar ingeniería inversa a un esquema de base de datos existente.
El enfoque Database First en EF Core
En el enfoque Database First, se utiliza un esquema de base de datos existente para generar el modelo de entidad mediante las herramientas de EF Core. Estas herramientas pueden generar clases de entidad y configuraciones de mapeo mediante ingeniería inversa del esquema de la base de datos. También es posible sincronizar los cambios en el esquema de la base de datos con el modelo de entidad. Cuando los desarrolladores utilizan el enfoque Database First, obtienen más control sobre la estructura de la base de datos pero menos control sobre el modelo de código. Este enfoque es una buena opción al integrar EF Core con una base de datos existente o trabajar con bases de datos heredadas.
Usando el enfoque Code First en EF Core
Antes de poder usar EF Core en su aplicación, debe agregar el paquete Microsoft.EntityFrameworkCore a su proyecto. Para hacer esto, seleccione el proyecto en la ventana del Explorador de soluciones, luego haga clic derecho y seleccione «Administrar paquetes NuGet». En la ventana del Administrador de paquetes NuGet, busque el paquete Microsoft.EntityFrameworkCore e instálelo.
Alternativamente, puede instalar el paquete a través de la consola del Administrador de paquetes NuGet ingresando el siguiente comando.
PM> Install-Package Microsoft.EntityFrameworkCore
Dejando eso de lado, ahora creemos un modelo de datos usando el enfoque Code First en EF Core. Haremos esto en cinco pasos: definir las clases de dominio, crear la clase DbContext, configurar DbContext, registrar DbContext y finalmente migrar la base de datos.
Paso 1: Defina sus clases de dominio
Comience creando las clases de dominio que corresponden a las entidades en su aplicación. El siguiente fragmento de código define una clase de Autor y sus miembros.
public class Author { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } }
Paso 2: crear la clase DbContext
Crea una clase que amplíe la Clase DbContext de EF Core. Esta clase representa el contexto de su base de datos y es la puerta de entrada a todas las comunicaciones entre su aplicación y la base de datos. En otras palabras, la clase DbContext actúa como punto de entrada para realizar operaciones CRUD en los datos.
public class AuthorDbContext : DbContext { public DbSet<Author> Authors { get; set; } public AuthorDbContext(DbContextOptions<AuthorDbContext> options) : base(options) { } }
Observe cómo se pasa la instancia de DbContextOptions al constructor de esta clase. Esta instancia contendrá el proveedor de la base de datos y la información de la cadena de conexión que su aplicación necesita para conectarse a la base de datos.
Paso 3: configurar DbContext
A continuación, anule el método OnModelCreating de su clase AuthorDbContext para configurar el modelo y sus relaciones como se muestra en el fragmento de código a continuación.
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Author>() .Property(p => p.FirstName).IsRequired().HasMaxLength(50); }
Paso 4: Registre DbContext
Ahora registre AuthorDbContext con el contenedor de inyección de dependencia utilizando el siguiente fragmento de código. Esto permitirá que su aplicación acceda a la instancia de DbContext durante todo su ciclo de vida.
builder.Services.AddDbContext<AuthorDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("AuthorDb")));
Paso 5: migrar la base de datos
En este paso final aprovechamos la función de migración de EF Core para crear o actualizar el esquema de la base de datos según nuestro modelo de datos. Para hacer esto, ejecute el siguiente comando en la ventana CLI de EF Core o en la consola del Administrador de paquetes NuGet.
dotnet ef migrations add InitialMigration
Y eso es todo lo que tiene que hacer para que su aplicación esté en funcionamiento utilizando el enfoque Code First.
Cada uno de los tres enfoques para crear un modelo de datos en EF Core tiene sus ventajas y desventajas. Debe seleccionar el enfoque correcto para su aplicación según los requisitos. Discutiré los otros dos enfoques, Model First y Database First, en detalle en futuras publicaciones aquí.
Copyright © 2024 IDG Communications, Inc.