Um projeto de laboratório desenvolvido em ASP.NET Core MVC focado na implementação de operações CRUD utilizando ADO.NET puro (sem ORMs como Entity Framework). O sistema permite o gerenciamento de um catálogo de produtos com upload de imagens.
Nota de Escopo: Este repositório é um estudo de caso sobre manipulação direta de dados via SqlClient e tratamento de formulários multipart em controllers MVC e rotas de API.
- Framework: .NET 9.0 (ASP.NET Core MVC)
- Acesso a Dados: ADO.NET (
Microsoft.Data.SqlClient) - Frontend UI: Razor Views com Bootstrap 5.
- Integração de Arquivos: Upload assíncrono manipulando
IFormFile.
O projeto explora dois fluxos de comunicação:
9. Fluxo MVC Tradicional: Views renderizadas no servidor (ProdutosController) com validação de formulários e Anti-Forgery Tokens.
10. Endpoints de API: Disponibilização paralela de dados via REST (ProdutosApiController) para consumo por clientes externos (CORS habilitado para Live Server local).
- .NET 9.0 SDK.
- SQL Server (LocalDB ou Express).
O projeto não utiliza Entity Framework Migrations e possui acesso a dados instanciado manualmente.
13. Crie um banco de dados chamado LojaMvc na sua instância do SQL Server.
14. Execute o script de criação da tabela:
CREATE TABLE Produtos (
Id INT IDENTITY(1,1) PRIMARY KEY,
Nome VARCHAR(100) NOT NULL,
Preco DECIMAL(18,2) NOT NULL,
Descricao TEXT NOT NULL,
ImagemUrl VARCHAR(255) NULL
);
- Ajuste Obrigatório: Abra o arquivo
Data/ProdutoRepository.cse altere aconnectionStringpara apontar para o seu servidor SQL local. O valor atual aponta estaticamente para um hostname específico e falhará na sua máquina.
dotnet restore
dotnet run
Acesse http://localhost:5055 no seu navegador.
Este é um projeto em evolução. Os seguintes pontos requerem refatoração para atingir padrões de produção:
- Configuração: Extrair a string de conexão de dentro de
ProdutoRepository.cspara oappsettings.jsone injetá-la via Dependency Injection (DI). - Observabilidade: Implementar logging adequado (
ILogger) nos blocoscatchdo repositório para evitar o silenciamento de exceções críticas do banco de dados. - Storage: Migrar a persistência de imagens da pasta local
wwwroot/imagespara um serviço de armazenamento em nuvem (ex: AWS S3 ou Azure Blob Storage).