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

Untitled

Abra o arquivo appsettings.json e adiciona a conexão local

Untitled

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();
    }
}