API con ASP.NET MVC 6 y SQL Server mediante Entity Framework core 6 - Code First - Parte 1
Published: 2022-06-24 04:55:07

**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](https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-2-4lbg)

###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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hs9es1lrazkadjo6uh7i.jpg)
 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwgrncb1pmctf9a2s7et.jpg)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86x9h0lgx79mfqjt77ps.jpg)
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
```csharp
namespace DemoAPI.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
}

```
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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjbjqnj7ph8ej221pyib.jpg)

##**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.

```csharp
using Microsoft.EntityFrameworkCore;

namespace DemoAPI.Models
{
    public class DemoContext : DbContext
    {
        public DemoContext(DbContextOptions<DemoContext> options) : base(options)
        {
        }
        public DbSet<Product> Products { get; set; }
    }
}
```
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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e70e6cg3zo94nxv4rdlp.jpg)

##**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í
```json
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "server = localhost; database = DemoApi; Trusted_Connection = true"
  },
  "AllowedHosts": "*"
}
```
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.
```csharp
builder.Services.AddDbContext<DemoContext>(
    options =>
    {
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
    });
```

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í
```csharp
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");
        }
    }
}

```
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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0llgi3t6s1q3rk2moiux.jpg)

Ahoya ya tenemos todo listo para empezar con nuestro CRUD, te dejo el enlace a la [PARTE 2](https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-2-4lbg)

Muchas gracias por leerme y Nos vemos en [Twitter](https://twitter.com/veronicaguamann) e [Instagram](https://www.instagram.com/veronicaguamann) ;)