DEV Community

Verónica Guamán
Verónica Guamán

Posted on • Updated on

API con ASP.NET MVC 6 y SQL Server mediante Entity Framework core 6 - Code First - Parte 1

ASP.NET 6 se ha actualizado junto a .NET 6, y una de las actualizaciones más notables ha sido la eliminación del archivo Startup.cs, el cual se ha unificado con el archivo Program.cs

Esto suele crear una confusión de como llevábamos nuestras conexiones con los servicios, por ejemplo la conexión a la Base de datos con Entity Framework entre otras configuraciones que veremos en el tutorial de hoy

En ese sentido, en este tutorial vamos a crear un API con métodos fundamentales, un CRUD y veremos como podemos conectar nuestro proyecto con SQL Server mediante Entity Framework.

En este Artículo en especifico, vamos a ver la parte 1, la cual consiste en realizar toda la configuración de Entity Framework hasta la migración de nuestra entidad hacia la base de datos.
Y vamos a ver como sin tocar SQL ni nuestro gestor SQL Server vamos a crear la base de datos y la tabla Product con sus respectivos campos.

Para la realización de las funciones (CRUD) te dejo la Parte 2

Para este tutorial vamos a necesitar

  • Visual Studio 2022(ya incluye SDK .NET 6) o SDK .NET 6 y Editor de código de su preferencia
  • SQL server Management Studio

Teniendo todo esto listo, vamos a empezar.

1. Crear un proyecto API - ASP.NET MVC 6

EL primer paso es crear un proyecto ASP.NET Core Web API
Image description
Al crear el proyecto debemos elegir la versión de nuestro proyecto, en este caso .NET 6 y dejamos las opciones que vienen marcadas por defecto

Image description

A primera vista podemos observar la estructura de la plantilla con estructura MVC y algo nuevo, desapareció el archivo STARTUP.CS

Image description
Aunque el archivo no viene por defecto en la plantilla, nosotros podemos añadirlo manualmente.

2. Agregar la clase "Product"

Para este proyecto vamos a crear un CRUD para productos, entonces, vamos a crearnos una carpeta llamada Models y dentro de esta agregamos una nueva carpeta y la nombraremos Data, añadimos una clase con los atributos de la entidad Product. en este caso solamente va a tener un Id, un nombre y una descripción



namespace DemoAPI.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
}



Enter fullscreen mode Exit fullscreen mode

Hecho esto vamos con el siguiente paso.

3. Instalar paquetes de Entity Framework

Para poder conectarnos con SQL Server vamos a utilizar Entity Framework, entonces para esto necesitamos agregar 3 paquetes a nuestro proyecto.

  • Entity Framework Core
  • EF para SQL Server y
  • Entity Framework Tools

Para esto nos vamos al Administrador de paquetes Nuget, buscamos los paquetes mencionados anteriormente y le damos en instalar

Image description

4. Agregar y configurar el DbContext

El siguiente paso será configurar la conexión a la base de datos, para esto en la misma carpeta Models/Data, agregamos una clase que se llamará DemoContext.cs y dentro de esta vamos a agregar la siguiente configuración.



using Microsoft.EntityFrameworkCore;

namespace DemoAPI.Models
{
    public class DemoContext : DbContext
    {
        public DemoContext(DbContextOptions<DemoContext> options) : base(options)
        {
        }
        public DbSet<Product> Products { get; set; }
    }
}


Enter fullscreen mode Exit fullscreen mode

Aqui agregamos a nuestra entidad, Product que es la que vamos a agregar a la base de datos.
La estructura de nuestro proyecto hasta el momento se ve así

Image description

5. Agregar nuestra cadena de conexión a la Base de Datos

Desde .NET core las cadenas de conexión o configuraciones que solían ir en el webconfig podemos colocarlos en le archivo appsettings.json, entonces vamos a agregar la cadena de conexión a este archivo y quedará algo así



{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "server = localhost; database = DemoApi; Trusted_Connection = true"
  },
  "AllowedHosts": "*"
}


Enter fullscreen mode Exit fullscreen mode

Agregamos la cadena de conexión, aquí va el nombre del servidor en el que se encuentra tu base de datos, en este caso el mío es local host, segundo va el nombre de tu base de datos y por ultimo agregamos esta configuración de seguridad, si el nombre de tu servidor es diferente y/o tiene usuario o contraseña debemos agregarla a la cadena de conexión como "user = tuUsuario" y "password = tucontraseña".

Esta configuración nos va a servir en el siguiente punto

6. Configurar mi Program.cs para obtener la cadena de conexión

En este punto vamos a configurar el archivo Program.cs, anteriormente esta configuración la realizábamos en el startup.cs pero no difiere en mucho, debemos agregar las siguientes líneas.



builder.Services.AddDbContext<DemoContext>(
    options =>
    {
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
    });


Enter fullscreen mode Exit fullscreen mode

Aquí hacemos uso del paquete EF para SQL Server, y obtenemos la cadena de conexión del appsettings.json para poder conectarnos a nuestro servidor y poder crear y posteriormente interactuar con la base de datos

7. Realizar la migración del ASP.NET MVC a Base de Datos

Hechos todos los pasos anteriores, vamos a la consola de paquetes en visual studio o a la terminal y vamos a ejecutar el siguiente comando Add-Migration InitialMigration en donde InitialMigrations puede ser modificada a tu gusto, es como se llamará está migración en especifico, en este caso yo la llamé así, y acorde vayas migrando puedes especificar que cambios agregas etc.
Si todo está configurado correctamente, se debío crear una carpeta con el nombre especificado en este caso InitalMigration y dentro de esta un archivo con todos los cambios que se van a ir a la base de datos. se verá algo así



using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace DemoAPI.Migrations
{
    public partial class InitialMigration : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Products",
                columns: table => new
                {
                    Id = table.Column<int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
                    Description = table.Column<string>(type: "nvarchar(max)", nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Products", x => x.Id);
                });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "Products");
        }
    }
}



Enter fullscreen mode Exit fullscreen mode

Aquí podemos observar este código generado que contiene toda la información de la migración, en este caso nos dice que vamos a crear una tabla llamada Product con los campos especificados y le asigna por defecto al Id como clave primaria.
El siguiente comando es Update-Database con este comando vamos a enviar todos estos cambios a la base de datos, si todo está correcto podemos ir a nuestro SQL Server Management Studio a verificar que se creo nuestra base de datos DemoApi y la tabla Product

Podremos visualizar esto:
Image description

Ahoya ya tenemos todo listo para empezar con nuestro CRUD, te dejo el enlace a la PARTE 2

Muchas gracias por leerme y Nos vemos en Twitter e Instagram ;)

Top comments (7)

Collapse
 
javic18 profile image
Javier Carrillo

Hola, disculpa tengo una pregunta, ya que al agregar absolutamente todo y querer agregar el add-migration me sale un error, no se si de casualidad sabras en que me estoy equivocando o si me hace falata algo, Saludos!

Image description

Collapse
 
veronicaguamann profile image
Verónica Guamán

Hola Javier, gracias por seguir el tutorial.
Puedes verificar que estés en la ruta correcta, es decir que estés en el proyecto, puedes verificarlo haciendo un => dir ** justo en el punto en el que estés, y puedes navegar con el => **cd para ingresar al proyecto.
Me avisas como te va con eso por favor

Collapse
 
djnitrocode profile image
jose manuel

Checa que este completo en el context. ami me marco y me faltaba esta parte

: base(options) {

saludos

Collapse
 
djnitrocode profile image
jose manuel

Muy bien explicado la primer parte voy a la segunda parte, gracias

Collapse
 
mhcastelltraceit profile image
MHCASTELLTRACEIT

Tendras de casualidad tu repo?
Soy muy nuevo en tratar de integrar entity framework y tengo mis dudas con Progam.cs de antemano muchas gracias.

Collapse
 
djnitrocode profile image
jose manuel

Hola te comparto mi Program.cs


using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using webApiUno.Models.Data;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at aka.ms/aspnetcore/swashbuckle

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddDbContext(
options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Collapse
 
saralop4 profile image
Sarah Lopez

Muy buen material y bien explicado, muchas gracias!