Dapper é um micro-ORM ORM (Object-Relational Mapping) para C# que simplifica o acesso a dados em bancos de dados relacionais;
Instale o pacote que iremos utilizar
Abra o console do package manager
Install-Package Dapper
Install-Package Microsoft.Data.Sqlite.Core
Install-Package SQLitePCLRaw.bundle_e_sqlcipher
Abra o arquivo appsettings.json e adiciona a conexão local
Incluir configuração básica na program para corrigir a inicialização do SqlLite
using SQLitePCL;
//pode inserir antes do run
Batteries.Init();
[ApiController]
[Route("[controller]")]
public class ProdutoController : ControllerBase
{
private readonly string? _connectionString;
public ProdutoController(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("DefaultConnection");
}
private IDbConnection OpenConnection()
{
IDbConnection dbConnection = new SqliteConnection(_connectionString);
dbConnection.Open();
return dbConnection;
}
[HttpGet]
public async Task<IActionResult> Index()
{
using IDbConnection dbConnection = OpenConnection();
var result = await dbConnection.QueryAsync<Produto>("select id, nome, descricao, imagemUrl from produto;");
return Ok(result);
}
[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
using IDbConnection dbConnection = OpenConnection();
var produto = await dbConnection.QueryFirstOrDefaultAsync<Produto>(sql, new { id });
if (produto == null)
{
return NotFound();
}
return Ok(produto);
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] Produto produto)
{
using IDbConnection dbConnection = OpenConnection();
dbConnection.Execute("insert into Produto(nome, descricao, imagemUrl) values(@Nome, @Descricao, @ImagemUrl)", produto);
return Created();
}
[HttpPut]
public IActionResult Put([FromBody] Produto produto)
{
using IDbConnection dbConnection = OpenConnection();
// Atualiza o produto
var query = @"UPDATE Produto SET
Nome = @Nome,
Descricao = @Descricao,
ImagemUrl = @ImagemUrl
WHERE Id = @Id";
dbConnection.Execute(query, produto);
return Ok();
}
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
{
using IDbConnection dbConnection = OpenConnection();
var produto = await dbConnection.QueryAsync<Produto>("delete from produto where id = @id;", new { id });
return Ok();
}
}