Usando Entity Framework em APIs

18/06/2024

Usando Entity Framework em APIs

O Entity Framework (EF) é um Object-Relational Mapper (ORM) para .NET, desenvolvido pela Microsoft, que simplifica a interação com bancos de dados relacionais. Quando combinado com APIs, especialmente em arquiteturas de microserviços e RESTful APIs, o EF oferece uma maneira robusta e eficiente de realizar operações CRUD (Create, Read, Update, Delete). Neste artigo, exploraremos como usar o Entity Framework em APIs para criar aplicações modernas, escaláveis e de fácil manutenção.

Benefícios do Entity Framework em APIs

  1. Abstração do Banco de Dados: Permite trabalhar com dados como objetos, eliminando a necessidade de SQL explícito.
  2. Consultas LINQ: Facilita a escrita de consultas de forma expressiva e fortemente tipada.
  3. Migrations: Gerencia mudanças no esquema do banco de dados de maneira segura e automática.
  4. Integração Simples: Fácil de integrar com ASP.NET Core para construir APIs RESTful.

Configuração Inicial

1. Criação do Projeto

Primeiro, crie um novo projeto ASP.NET Core Web API:

dotnet new webapi -n MyApi cd MyApi

2. Instalação dos Pacotes Necessários

Instale os pacotes do Entity Framework Core:

dotnet add package Microsoft.EntityFrameworkCore 

dotnet add package Microsoft.EntityFrameworkCore.SqlServer 

dotnet add package Microsoft.EntityFrameworkCore.Tools


Configuração do Entity Framework

1. Definição do Modelo

Crie as classes de modelo que representarão as tabelas no banco de dados:



  1. public class Blog  
  2. {  
  3.     public int BlogId { getset; }  
  4.     public string Name { getset; }  
  5.     public ICollection<Post> Posts { getset; }  
  6. }  
  7.   
  8. public class Post  
  9. {  
  10.     public int PostId { getset; }  
  11.     public string Title { getset; }  
  12.     public string Content { getset; }  
  13.     public int BlogId { getset; }  
  14.     public Blog Blog { getset; }  
  15. }  


2. Criação do DbContext

Crie a classe de contexto que gerencia as entidades:


  1. public class BloggingContext : DbContext  
  2. {  
  3.     public BloggingContext(DbContextOptions<BloggingContext> options)  
  4.         : base(options)  
  5.     {  
  6.     }  
  7.   
  8.     public DbSet<Blog> Blogs { getset; }  
  9.     public DbSet<Post> Posts { getset; }  
  10. }  

3. Configuração do DbContext no Startup

Configure o DbContext no arquivo Startup.cs:


  1. public void ConfigureServices(IServiceCollection services)  
  2. {  
  3.     services.AddDbContext<BloggingContext>(options =>  
  4.         options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));  
  5.   
  6.     services.AddControllers();  
  7. }  

Adicione a string de conexão no appsettings.json:


  1. {  
  2.   "ConnectionStrings": {  
  3.     "DefaultConnection""Server=(localdb)\\mssqllocaldb;Database=BloggingDb;Trusted_Connection=True;MultipleActiveResultSets=true"  
  4.   }  
  5. }  

Criação de Controladores

1. Controlador de Blogs

Crie um controlador para gerenciar blogs:



  1. [Route("api/[controller]")]  
  2. [ApiController]  
  3. public class BlogsController : ControllerBase  
  4. {  
  5.     private readonly BloggingContext _context;  
  6.   
  7.     public BlogsController(BloggingContext context)  
  8.     {  
  9.         _context = context;  
  10.     }  
  11.   
  12.     [HttpGet]  
  13.     public async Task<ActionResult<IEnumerable<Blog>>> GetBlogs()  
  14.     {  
  15.         return await _context.Blogs.Include(b => b.Posts).ToListAsync();  
  16.     }  
  17.   
  18.     [HttpGet("{id}")]  
  19.     public async Task<ActionResult<Blog>> GetBlog(int id)  
  20.     {  
  21.         var blog = await _context.Blogs.Include(b => b.Posts)  
  22.                                        .FirstOrDefaultAsync(b => b.BlogId == id);  
  23.   
  24.         if (blog == null)  
  25.         {  
  26.             return NotFound();  
  27.         }  
  28.   
  29.         return blog;  
  30.     }  
  31.   
  32.     [HttpPost]  
  33.     public async Task<ActionResult<Blog>> PostBlog(Blog blog)  
  34.     {  
  35.         _context.Blogs.Add(blog);  
  36.         await _context.SaveChangesAsync();  
  37.   
  38.         return CreatedAtAction("GetBlog"new { id = blog.BlogId }, blog);  
  39.     }  
  40.   
  41.     [HttpPut("{id}")]  
  42.     public async Task<IActionResult> PutBlog(int id, Blog blog)  
  43.     {  
  44.         if (id != blog.BlogId)  
  45.         {  
  46.             return BadRequest();  
  47.         }  
  48.   
  49.         _context.Entry(blog).State = EntityState.Modified;  
  50.   
  51.         try  
  52.         {  
  53.             await _context.SaveChangesAsync();  
  54.         }  
  55.         catch (DbUpdateConcurrencyException)  
  56.         {  
  57.             if (!BlogExists(id))  
  58.             {  
  59.                 return NotFound();  
  60.             }  
  61.             else  
  62.             {  
  63.                 throw;  
  64.             }  
  65.         }  
  66.   
  67.         return NoContent();  
  68.     }  
  69.   
  70.     [HttpDelete("{id}")]  
  71.     public async Task<IActionResult> DeleteBlog(int id)  
  72.     {  
  73.         var blog = await _context.Blogs.FindAsync(id);  
  74.         if (blog == null)  
  75.         {  
  76.             return NotFound();  
  77.         }  
  78.   
  79.         _context.Blogs.Remove(blog);  
  80.         await _context.SaveChangesAsync();  
  81.   
  82.         return NoContent();  
  83.     }  
  84.   
  85.     private bool BlogExists(int id)  
  86.     {  
  87.         return _context.Blogs.Any(e => e.BlogId == id);  
  88.     }  
  89. }  


Executando Migrations

Para criar e aplicar as migrations:



dotnet ef migrations add InitialCreate
dotnet ef database update


Testando a API

Execute a aplicação e use uma ferramenta como Postman ou o Swagger UI integrado para testar os endpoints da API.




Integrar o Entity Framework em APIs ASP.NET Core proporciona uma maneira eficiente e escalável de gerenciar operações de banco de dados. O EF simplifica a interação com os dados, permitindo que os desenvolvedores se concentrem na lógica de negócios. Com as habilidades apresentadas neste artigo, você pode começar a desenvolver APIs robustas que aproveitam o poder do Entity Framework.