Utilizando o Micro ORM PetaPoco em uma aplicação ASP.NET Core \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 21 Horas 

 10 Min 

 24 Seg 

   Tempo restante da oferta: 21 10 24 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Utilizando o Micro ORM PetaPoco em uma aplicação ASP.NET Core  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) [ .NET Core ](https://www.treinaweb.com.br/blog/categoria/net-core) 

# Utilizando o Micro ORM PetaPoco em uma aplicação ASP.NET Core

 Aprenda a utilizar o Micro ORM PetaPoco em uma aplicação ASP.NET Core.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 9 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/01/01132725/PETAPOCO.png)  

 Como a maioria dos desenvolvedores .NET, quase todas as minhas aplicações fazem uso do Entity Framework. Fazer parte do ecossistema, ser integrado ao Visual Studio, possuir vários recursos, são sempre vantagens que nos leva a optar por seu uso.

Mas, as vezes, mesmo estas vantagens podem aborrecer. Pois quando que ser algo fora do padrão, o processo pode ser muito verboso ou caso o projeto seja muito simples, caímos na situação de matar uma barata com um canhão.

Para estes casos, felizmente, temos os micro-frameworks ORM. Em artigos passados, já falei sobre o [Dapper](https://www.treinaweb.com.br/blog/utilizando-o-micro-orm-dapper-em-uma-aplicacao-asp-net-core/) e o [ServiceStack.OrmLite](https://www.treinaweb.com.br/blog/utilizando-o-micro-orm-servicestack-ormlite-em-uma-aplicacao-asp-net-core/).

No artigo de hoje abordarei o PetaPoco.

[  ![C# (C Sharp) Básico](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) Básico Conhecer o curso ](https://www.treinaweb.com.br/curso/csharp-basico)

## PetaPoco

O [PetaPoco](https://github.com/CollaboratingPlatypus/PetaPoco) é um micro-framework ORM, criado por Brad Robinson, da [topten software](http://www.toptensoftware.com/), que agora é mantido pelo grupo [Collaborating Platypus](http://collaboratingplatypus.com/).

Focado em rapidez e facilidade, o PetaPoco é uma solução de um arquivo, por isso é pequeno e não possui dependências. Como o nome sugere, trabalha com classes POCO, que requerem pouca configuração. Para facilitar, também inclui templates T4, que geram automaticamente classes POCO e suporta configurações Fluent.

No momento da criação deste artigo, ele suporta os bancos: SQL Server, SQL Server CE, Microsoft Access, SQLite, MySQL, MariaDB, Firebird e PostgreSQL (Oracle é suportado, mas não possui testes de integração).

Para exemplificar o seu uso, vamos ver um exemplo dele em uma aplicação ASP.NET Core.

## Criando a aplicação

No terminal, digite o código abaixo para criar uma aplicação chamada **AspNetCorePetaPoco**:

```dos
dotnet new mvc -n AspNetCorePetaPoco

```

Acesse a pasta da aplicação e adicione nela o pacote do **PetaPoco**:

```dos
dotnet add package PetaPoco.Core.Compiled

```

Por fim, é necessário adicionar a biblioteca do provedor que iremos utilizar:

```dos
dotnet add package MySql.Data

```

Não esqueça de aplicar o **restore**:

```dos
dotnet restore

```

Agora podemos começar a configuração do PetaPoco.

## Criando a classe POCO

Para esta entidade será utilizado a classe POCO (aka Model/Entidade) abaixo:

```csharp
using System;

namespace AspNetCorePetaPoco.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Quantity { get; set; }
        public double Price { get; set; }
    }
}

```

Caso queria modificar o comportamento padrão, pode ser utilizado fluent, ou definir os atributos decoradores, por exemplo:

```csharp
[TableName("Pessoas")]
[PrimaryKey("Id", AutoIncrement = false)]
public class Pessoa
{
    [Column]
    public Guid Id { get; set; }

    [Column]
    public string Nome { get; set; }

    [Column]
    public int Idade { get; set; }

    [Column]
    public int Altura { get; set; }

    [Column(Name = "Data Nascimento")]
    public DateTime? Nascimento { get; set; }

    [Ignore]
    public string NomeIdade => $"{Nome} tem a idade {Idade}";
}

```

Neste arquivo, me aterei a classe `Product`.

## Configurando o acesso ao banco de dados

Assim como os outros micro-ORM, o PetaPoco não define uma classe de configuração, o acesso ao banco de dados pode ser obtido através do método `DataBase` da classe `PetaPoco`:

```csharp
var db = new PetaPoco.Database("connectionStringName");

```

Ou através de fluent:

```csharp
var db = DatabaseConfiguration.Build()
         .UsingConnectionString("Server=127.0.0.1;Uid=root;Pwd=1234;Database=PetaPocoExample;Port=3306")
         .UsingProvider()
         .UsingDefaultMapper(m =>
         {
             m.InflectTableName = (inflector, s) => inflector.Pluralise(inflector.Underscore(s));
             m.InflectColumnName = (inflector, s) => inflector.Underscore(s);
         })
         .Create();

```

Ele também não cria as estruturas no banco de dados, então elas devem ser criadas “na mão”. Neste exemplo, estou definindo o código de criação da tabela em um arquivo chamado **mysql\_init.sql**, que foi salvo em uma pasta chamada **Scripts** e contém o conteúdo abaixo:

```sql
CREATE TABLE IF NOT EXISTS Product (

	id				bigint AUTO_INCREMENT NOT NULL,
	name			varchar(500) NOT NULL,
	quantity		int NOT NULL,
	price	        decimal(10,2) NOT NULL,	
	PRIMARY KEY (id)
) ENGINE=INNODB;

```

Agora, iremos definir a execução deste script e o acesso ao banco, em um repositório abstrato:

```csharp
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using PetaPoco;
using PetaPoco.Providers;

namespace AspNetCorePetaPoco.Repositories
{
    public abstract class AbstractRepository
    {
        private string _connectionString;
        private IDatabase _db;
        protected IDatabase Db => _db;
        public AbstractRepository(IConfiguration configuration){
            _connectionString = configuration.GetValue("DBInfo:ConnectionString");

            _db =  DatabaseConfiguration.Build()
                    .UsingConnectionString(_connectionString)
                    .UsingProvider()
                    .Create();

            _db.Execute(LoadTextResource("mysql_init.sql"));
        }
        public abstract void Add(T item);
        public abstract void Remove(int id);
        public abstract void Update(T item);
        public abstract T FindByID(int id);
        public abstract IEnumerable FindAll();

        private string LoadTextResource(string name)
		{
			var path = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Scripts", name);
            System.Console.WriteLine(path);
			System.IO.StreamReader r = new System.IO.StreamReader(path);
			string str = r.ReadToEnd();
			r.Close();

			return str;
		}
    }
}

```

Note que no método construtor um objeto de `_Db` foi criado:

```csharp
_db =  DatabaseConfiguration.Build()
                    .UsingConnectionString(_connectionString)
                    .UsingProvider()
                    .Create();

```

Acima, é importante que o Provider reflita corretamente a biblioteca de acesso instalada.

Agora para finalizar a configuração, vamos definir o repositório abaixo:

```csharp
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using PetaPoco;
using PetaPoco.Providers;
using AspNetCorePetaPoco.Models;

namespace AspNetCorePetaPoco.Repositories
{
    public class ProductRepository: AbstractRepository
    {
        public ProductRepository(IConfiguration configuration): base(configuration) { }

        public override void Add(Product item)
        {
            Db.Insert(item);
        }
        public override void Remove(int id)
        {
            var product = Db.Single(id);
            Db.Delete(product);
        }
        public override void Update(Product item)
        {
            Db.Update(item);
        }
        public override Product FindByID(int id)
        { 
            return Db.Single(id);
        }
        public override IEnumerable FindAll()
        { 
            return Db.Query("SELECT * FROM Products");
        }
    }
}

```

Note que o PelaPoco gera as queries SQL com base na classe POCO informada no parâmetro dos métodos:

```csharp
Db.Insert(item);

```

E quando ele não consegue gerar, deve ser informado a query:

```csharp
return Db.Query("SELECT * FROM Products");

```

## Usando o PetaPoco

Para exemplificar o uso do PetaPoco, crie o controller abaixo:

```csharp
using System.Linq;
using AspNetCorePetaPoco.Models;
using AspNetCorePetaPoco.Repositories;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace AspNetCorePetaPoco.Controllers
{
    public class ProductController : Controller
    {
        private readonly ProductRepository productRepository;

        public ProductController(IConfiguration configuration){
            productRepository = new ProductRepository(configuration);
        }

        // GET: Products
        public ActionResult Index()
        {
            return View(productRepository.FindAll().ToList());
        }

        // GET: Products/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return StatusCode(StatusCodes.Status404NotFound);
            }
            Product product = productRepository.FindByID(id.Value);
            if (product == null)
            {
                return StatusCode(StatusCodes.Status404NotFound);
            }
            return View(product);
        }

        // GET: Products/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Products/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind("Id,Name,Quantity,Price")] Product product)
        {
            if (ModelState.IsValid)
            {
                productRepository.Add(product);
                return RedirectToAction("Index");
            }

            return View(product);
        }

        // GET: Products/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return StatusCode(StatusCodes.Status400BadRequest);
            }
            Product product = productRepository.FindByID(id.Value);
            if (product == null)
            {
                return StatusCode(StatusCodes.Status404NotFound);
            }
            return View(product);
        }

        // POST: Products/Edit/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind("Id,Name,Quantity,Price")] Product product)
        {
            if (ModelState.IsValid)
            {
                productRepository.Update(product);
                return RedirectToAction("Index");
            }
            return View(product);
        }

        // GET: Products/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return StatusCode(StatusCodes.Status400BadRequest);
            }
            Product product = productRepository.FindByID(id.Value);
            if (product == null)
            {
                return StatusCode(StatusCodes.Status404NotFound);
            }
            return View(product);
        }

        // POST: Products/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            productRepository.Remove(id);
            return RedirectToAction("Index");
        }
    }
}

```

Também crie as views para as actions acima e então podemos ver o sistema funcionando:

![Print da aplicação criada no artigo](https://dkrn4sk0rn31v.cloudfront.net/2018/01/31172013/print_aspnetcorepetapoco.png)

[  ![C# (C Sharp) Intermediário](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) Intermediário Conhecer o curso ](https://www.treinaweb.com.br/curso/csharp-intermediario)

- [ #C# ](https://www.treinaweb.com.br/blog/tag/csharp)
- [ #.NET Core ](https://www.treinaweb.com.br/blog/tag/net-core)
- [ #PetaPoco ](https://www.treinaweb.com.br/blog/tag/petapoco)
- [ #ASP .NET Core ](https://www.treinaweb.com.br/blog/tag/asp-net-core)

  Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  ## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/08/utilizando-o-micro-orm-dapper-em-uma-aplicacao-asp-net-core-400x280.jpg)  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) 

     9 anos atrás

    ##  [ Utilizando o Micro ORM Dapper em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-micro-orm-dapper-em-uma-aplicacao-asp-net-core) 

     Conheça o micro framework ORM Dapper.NET e aprenda a utilizá-lo em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/11/06103205/orm-lite-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Utilizando o Micro ORM ServiceStack.OrmLite em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-micro-orm-servicestack-ormlite-em-uma-aplicacao-asp-net-core) 

     Aprenda na prática como fazer uso do micro framework ORM ServiceStack.OrmLite em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/hybrid-orm-repodb-no-asp-net-core-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Utilizando o hybrid ORM RepoDb em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-hybrid-orm-repodb-em-uma-aplicacao-asp-net-core) 

     Um meio termo entre o Dapper e o Entity Framework, o hybrid ORM RepoDb é uma ótima opção de ORM para aplicações intermediárias.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/01/10094842/service-stack-1-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Criando um Web Service com o ServiceStack – Parte 2 ](https://www.treinaweb.com.br/blog/criando-um-web-service-com-o-servicestack-parte-2) 

     Dando continuidade ao estudo da biblioteca ServiceStack, neste artigo modificaremos o web service criado na primeira parte.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/o-que-e-lumen-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     6 anos atrás

    ##  [ O que é Lumen? ](https://www.treinaweb.com.br/blog/o-que-e-lumen) 

     Veja neste artigo o que é Lumen, Micro-Framework PHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/10212549/O-QUE-É-SYMFONY-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ O que é Symfony? ](https://www.treinaweb.com.br/blog/o-que-e-symfony) 

     Neste artigo veremos o que é Symfony e suas principais características. Vamos falar sobre sua história, o padrão estrutural MVC, componentes, tipos de estruturas de projeto, além de ciclo de atualização e suporte.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/09/27152914/flask-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     7 anos atrás

    ##  [ O que é Flask? ](https://www.treinaweb.com.br/blog/o-que-e-flask) 

     Veja neste artigo o que é o Flask, principal micro-framework do ecossistema Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/conheca-o-padrao-arquitetural-porto-para-aplicacoes-back-end-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ Conheça o padrão arquitetural Porto para aplicações back-end ](https://www.treinaweb.com.br/blog/conheca-o-padrao-arquitetural-porto-para-aplicacoes-back-end) 

     Conheça o padrão arquitetural Porto! Voltado para aplicações back-end, ele permite escrever monolitos que podem ser facilmente migrados para micro serviços.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/android-things-1-400x280.jpg)  [ Tecnologia ](https://www.treinaweb.com.br/blog/categoria/tecnologia) 

     10 anos atrás

    ##  [ Android Things e a Internet das Coisas ](https://www.treinaweb.com.br/blog/android-things-e-a-internet-das-coisas) 

     Depois do Android Auto e Wear, o Google lançou o Android Things exclusivamente para a Internet das Coisas, a próxima revolução tecnológica.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/03163125/SYMFONY-FLEX-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ O que é o Symfony Flex e como ele funciona ](https://www.treinaweb.com.br/blog/o-que-e-o-symfony-flex-e-como-ele-funciona) 

     Nesse post falaremos sobre os principais conceitos do Symfony Flex. Veremos desde o início como ele funciona, qual seu papel na criação da estrutura do Symfony e como ele pode nos ajudar no processo de gerenciamento de dependências do projeto.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/14122245/LAMINAS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Laminas: O futuro do Zend Framework ](https://www.treinaweb.com.br/blog/laminas-o-futuro-do-zend-framework) 

     Você já ouviu falar no Laminas? Para quem não sabe, esse é o novo nome do já conhecido Zend Framework. Mas por que essa mudança no nome? Vamos entender o que motivou essa mudança nesse artigo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/a6GH8712a1-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ O PHP e o seu ecossistema nunca estiveram tão fortes ](https://www.treinaweb.com.br/blog/o-php-e-o-seu-ecossistema-nunca-estiveram-tao-fortes) 

     O PHP nunca esteve tão forte. Nesse artigo, algumas desconstruções de famosas falácias acerca do PHP e alguns pontos que o fazem ser uma completa plataforma para a Web.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação**  Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **21h 10min 24s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br) Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
