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