Net Core 5 - Code First

Net Core 5 - Code First

Hoy les presento cómo preparar nuestra aplicación (desde cero) en modo Code First.

Crear solución

mkdir dummy && cd dummy
dotnet new sln

Crear proyecto

mkdir api && cd api
dotnet new webapi

Linkear proyecto a la solución

dotnet sln dummy.sln add ./api/api.csproj

Entity Framework

cd login

dotnet add package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore  --version 5.0.11

dotnet add package Microsoft.EntityFrameworkCore.SqlServer  --version 5.0.11

dotnet add package Microsoft.EntityFrameworkCore.Design  --version 5.0.11

Crear modelo

using System;
using System.Collections.Generic;

namespace api.Models
{
    public class UserModel
    {
        public Guid Id { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }
        public string Password { get; set; }
        public DateTime Rol { get; set; }
    }
}

Crear contexto

using Microsoft.EntityFrameworkCore;

namespace api.Models
{
    public class ApiContext : DbContext
    {
        public ApiContext(DbContextOptions<ApiContext> options) : base(options)
        {
        }

        public DbSet<UserModel> Users { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<UserModel>().ToTable("User");
        }
    }
}

Modificar Startup.cs

using api.Models;
using Microsoft.EntityFrameworkCore;

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApiContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "login", Version = "v1" });
    });
}

Modificar appsettings.json

"ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=Dummy;User Id=sa;Password=PwD;"
}

Crear clase para migración

dotnet ef migrations add InitialCreate

Ejecutar migrador

Antes de la ejecución, debe poseer la base creada

dotnet ef database update

Generar controller

Con code generator

dotnet tool install -g dotnet-aspnet-codegenerator --version 5.0.2

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 5.0.2

dotnet build

(copiar por única vez)

mkdir Templates && mkdir Templates/ControllerGenerator

cp -r /home/$USER/.nuget/packages/microsoft.visualstudio.web.codegenerators.mvc/5.0.2/Templates/ControllerGenerator/* ./Templates/ControllerGenerator
dotnet aspnet-codegenerator controller -name UserController -async -api -m UserModel -dc ApiContext -outDir Controllers -nv -f

Ejecutar

dotnet run

https://localhost:5001/swagger