Guia Prático: Garantia de XSS Seguro com Sanitização em .NET
Guia Completo: Sistema de Agendamento com EF Core e SQLite
Introdução
Imagine que você precise gerenciar agendas de serviços, reuniões ou compromissos de clientes. Um sistema de agendamento permite que você controle horários ocupados ou disponíveis, e garanta que não haja conflitos
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. na hora de marcar um novo compromisso. Aqui, vamos criar um projeto simples utilizando EF Core e SQLite para armazenar todos os dados de agendamentos de forma prática e eficiente.
Tabela de Conteúdo🔗
1. Modelando Dados para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! Agendamentos
2. Configuração
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. do Projeto
3. Configurando o EF Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. com SQLite
4. Criando e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Aplicando Migrations
5. Operações CRUD
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.
6. Consultas
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. Personalizadas
7. Validações e Boas Práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.
8. Dicas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. de Uso no Mundo Real
10. Conclusão
Modelando Dados para Agendamentos🔗
Para começar, precisamos de uma classe
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. que represente um compromisso (Appointment). O model
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. deve conter as informações básicas para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! que possamos gerenciar cada agendamento. Exemplo:
public class Appointment
{
public int AppointmentId { get; set; }
public string Titulo { get; set; }
public DateTime DataInicio { get; set; }
public DateTime DataFim { get; set; }
public bool Confirmado { get; set; }
}
- AppointmentId: Identificador único do agendamento.
- Título
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades!: Uma breve descrição do compromisso (ex.: “Consulta
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. Dentista”). - DataInicio / DataFim: Intervalo de tempo do agendamento.
- Confirmado: Indica se o agendamento está ou não confirmado.
Você pode adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. outros campos conforme a necessidade, como local, nome do cliente ou qualquer outra informação relevante.
Configuração do Projeto🔗
Passo 1: Crie um novo projeto Console App no Visual Studio
🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!Prepare seu ambiente de desenvolvimento com o Visual Studio em uma aventura C#. Este tutorial prático ensina a instalar, configurar e personalizar sua IDE. (ou via CLI):
dotnet new console -n AgendamentoSystem
cd AgendamentoSystem
Passo 2: Instale os pacotes necessários:
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
👉 Dica rápida: O SQLite é perfeito para prototipagem - sem servidor necessário, apenas um arquivo .db!
Configurando o EF Core com SQLite🔗
Para trabalhar com SQLite via EF Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real., instale o pacote Microsoft.EntityFrameworkCore.Sqlite.
No seu arquivo .csproj, você pode adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos.:
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="x.x.x" />
</ItemGroup>
Em seguida, crie uma classe
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. de contexto:
using Microsoft.EntityFrameworkCore;
public class AgendaContext : DbContext
{
public DbSet<Appointment> Appointments { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// A string de conexão define o arquivo .db local que o SQLite usará
optionsBuilder.UseSqlite("Data Source=agenda.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Se desejar configurar restrições ou relacionamentos
base.OnModelCreating(modelBuilder);
}
}
- OnConfiguring: Define como queremos configurar o banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. (neste caso, SQLite). - UseSqlite("Data Source=agenda.db"): Indica onde
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. o arquivo do banco será gerado.
Criando e Aplicando Migrations🔗
Com o contexto e as entidades prontos, podemos criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. as migrations:
- No terminal (ou Package Manager Console), execute
🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção.:
- dotnet ef migrations add
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. Inicial - dotnet ef database
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. update
- dotnet ef migrations add
Isso vai criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. a estrutura de tabelas necessária no arquivo agenda.db. A migration
🔄 Migrations: Evolua seu Banco sem Perder Dados!Aprenda como aplicar migrations com segurança usando Entity Framework Core para evoluir seu banco de dados sem perder dados. “Inicial” conterá as instruções para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! montar a tabela de Appointments.
Operações CRUD🔗
Para mostrar como o EF Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. lida com operações básicas, vamos exemplificar o CRUD
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.:
Criar Agendamento
public void CriarAgendamento(Appointment novo)
{
using var context = new AgendaContext();
context.Appointments.Add(novo);
context.SaveChanges();
}
Ler / Listar Agendamentos
public List<Appointment> ListarAgendamentos()
{
using var context = new AgendaContext();
return context.Appointments.ToList();
}
Atualizar Agendamento
public void AtualizarAgendamento(int id, string novoTitulo)
{
using var context = new AgendaContext();
var agendamento = context.Appointments.Find(id);
if (agendamento != null)
{
agendamento.Titulo = novoTitulo;
context.SaveChanges();
}
}
Deletar Agendamento
public void DeletarAgendamento(int id)
{
using var context = new AgendaContext();
var agendamento = context.Appointments.Find(id);
if (agendamento != null)
{
context.Appointments.Remove(agendamento);
context.SaveChanges();
}
}
- Find(id): Busca a entidade pelo valor da chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. primária. - Add
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos.(), Remove
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos.(): Operações padrão para incluir ou excluir dados
📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias..
Consultas Personalizadas🔗
public List<Appointment> BuscarPorCliente(string nomeCliente)
{
return context.Agendamentos
.Where(a => a.Cliente.Contains(nomeCliente, StringComparison.OrdinalIgnoreCase))
.AsNoTracking() // Melhora performance em consultas somente leitura
.ToList();
}
⚡ Traduz para SQL:
SELECT * FROM Agendamentos
WHERE LOWER(Cliente) LIKE '%maria%'
Validações e Boas Práticas🔗
Antes de salvar:
public void ValidarAgendamento(Agendamento agendamento)
{
if (agendamento.DataHora < DateTime.Now)
throw new Exception("Data não pode ser no passado!");
if (string.IsNullOrEmpty(agendamento.Cliente))
throw new Exception("Cliente é obrigatório!");
// Verifica conflitos de horário
var existeConflito = context.Agendamentos
.Any(a => a.DataHora == agendamento.DataHora);
if (existeConflito)
throw new Exception("Já existe agendamento neste horário!");
}
🔒 Checklist de segurança:
1. Sempre valide dados antes do SaveChanges()
2. Use transações para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! operações críticas
3. Considere logging
📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável. de operações sensíveis
Dicas de Uso no Mundo Real🔗
- Verificar Conflitos
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. de Horários: Antes de salvar um novo agendamento, você pode verificar se existe algum agendamento que se sobrepõe às datas informadas. Exemplo:
bool ExisteConflito(DateTime inicio, DateTime fim)
{
using var context = new AgendaContext();
return context.Appointments.Any(a =>
(inicio < a.DataFim) && (fim > a.DataInicio));
}
- Eficiência
⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs.: Armazenar dados localmente em SQLite pode ser muito útil para aplicações pequenas ou uso offline. Se a aplicação crescer, você pode migrar para um banco de dados de maior porte facilmente, pois o EF Core permite trocar o provedor de banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. sem mudar a maior parte do código. - Validação
Como Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas.: Valide dados como DataFim sempre maior que DataInicio, e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Titulo não vazio. Em aplicações reais, essas regras devem ser bem estritas para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! evitar registros inválidos.
Desafio Prático🔗
Aprimore o sistema:
1. Adicione campo Status (enum
🧩 Enumerações: Dê Significado a Números com 'enum'!Descubra como as enumerações em C# eliminam números mágicos, melhoram a legibilidade e facilitam a manutenção do código, com exemplos claros e práticos.: Confirmado, Cancelado, Pendente)
2. Implemente soft delete
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. (não apagar registros, apenas marcar como excluído)
3. Crie relatório de horários mais populares por período
Dica de ouro:
// Exemplo de enum para status
public enum StatusAgendamento
{
Pendente,
Confirmado,
Cancelado
}
🎯 Meta profissional: Sistemas de agendamento são requisitados em diversas áreas - domine este padrão para aumentar seu portfólio!
Conclusão🔗
Com EF Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. e SQLite, você constrói um sistema de agendamento de maneira simples e rápida. A estrutura de dados, as migrations e as operações CRUD
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. formam a base de um projeto sólido. Você pode evoluir essa aplicação para incluir regras de negócio mais complexas, validações robustas e até sincronização com outros serviços, tudo aproveitando os recursos que o ORM do .NET oferece para facilitar a manutenção e expansão do seu projeto.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/

há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 11 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás