Configurando Entity Framework Core In-Memory

Configurar Entity Framework Core In-Memory em uma Aplicação ASP.NET Core

Configurar Entity Framework Core In-Memory em uma Aplicação ASP.NET Core

Para usar o Entity Framework Core In-Memory em uma aplicação ASP.NET Core, siga os passos abaixo. Isso é útil para testes e desenvolvimento rápido, pois você pode usar um banco de dados em memória que é descartado quando a aplicação é encerrada.

Passos para configurar o Entity Framework Core In-Memory

1. Crie uma nova aplicação ASP.NET Core

dotnet new webapi -n MinhaApi
cd MinhaApi

2. Adicione os pacotes necessários

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.InMemory

3. Crie o modelo de dados

Crie uma classe de modelo simples. Por exemplo, um modelo Cliente:

// Models/Cliente.cs
namespace MinhaApi.Models
{
    public class Cliente
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
    }
}

4. Configure o contexto de dados

Crie uma classe AppDbContext que herda de DbContext:

// Data/AppDbContext.cs
using Microsoft.EntityFrameworkCore;
using MinhaApi.Models;

namespace MinhaApi.Data
{
    public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options)
            : base(options)
        {
        }

        public DbSet<Cliente> Clientes { get; set; }
    }
}

5. Configure o serviço de banco de dados em memória no Startup.cs ou Program.cs

No ASP.NET Core 6 e posteriores, a configuração é feita no Program.cs.

// Program.cs
using Microsoft.EntityFrameworkCore;
using MinhaApi.Data;

var builder = WebApplication.CreateBuilder(args);

// Adicionar serviços ao contêiner.
builder.Services.AddControllers();
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseInMemoryDatabase("MinhaBaseDeDados"));

// Adicionar suporte a Swagger (opcional).
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configurar o pipeline HTTP.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

6. Crie um controlador de API

Crie um controlador para gerenciar os clientes. Por exemplo, ClientesController:

// Controllers/ClientesController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MinhaApi.Data;
using MinhaApi.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

[Route("api/[controller]")]
[ApiController]
public class ClientesController : ControllerBase
{
    private readonly AppDbContext _context;

    public ClientesController(AppDbContext context)
    {
        _context = context;
    }

    [HttpGet]
    public async Task<ActionResult<IEnumerable<Cliente>>> GetClientes()
    {
        return await _context.Clientes.ToListAsync();
    }

    [HttpGet("{id}")]
    public async Task<ActionResult<Cliente>> GetCliente(int id)
    {
        var cliente = await _context.Clientes.FindAsync(id);

        if (cliente == null)
        {
            return NotFound();
        }

        return cliente;
    }

    [HttpPost]
    public async Task<ActionResult<Cliente>> PostCliente(Cliente cliente)
    {
        _context.Clientes.Add(cliente);
        await _context.SaveChangesAsync();

        return CreatedAtAction("GetCliente", new { id = cliente.Id }, cliente);
    }

    [HttpPut("{id}")]
    public async Task<IActionResult> PutCliente(int id, Cliente cliente)
    {
        if (id != cliente.Id)
        {
            return BadRequest();
        }

        _context.Entry(cliente).State = EntityState.Modified;

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!ClienteExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return NoContent();
    }

    [HttpDelete("{id}")]
    public async Task<IActionResult> DeleteCliente(int id)
    {
        var cliente = await _context.Clientes.FindAsync(id);
        if (cliente == null)
        {
            return NotFound();
        }

        _context.Clientes.Remove(cliente);
        await _context.SaveChangesAsync();

        return NoContent();
    }

    private bool ClienteExists(int id)
    {
        return _context.Clientes.Any(e => e.Id == id);
    }
}

7. Execute a aplicação

dotnet run

Teste a API

Use uma ferramenta como Postman ou o Swagger UI (disponível em https://localhost:5001/swagger quando em desenvolvimento) para testar os endpoints da sua API.

Agora, você tem uma aplicação ASP.NET Core que usa Entity Framework Core com um banco de dados In-Memory para gerenciar entidades Cliente. Isso é útil para desenvolvimento e testes rápidos sem a necessidade de configurar um banco de dados persistente.

Isto foi útil?

1 / 0