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!🤝 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!)🔄 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🚀 Scale Out com Redis: Atenda Milhões de Conexões!🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real. do Projeto

3. Configurando o EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 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!📊 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!🌍 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!🎲 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!🔢 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!🔢 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

9. Desafio Prático

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)!🏗️ 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!🎭 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!)🔄 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; }
}

Você pode adicionar📦 List<T>: Dinamismo além dos Arrays!📦 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!🛠️ 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!🌍 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!📦 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)!🏗️ 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);
    }
}

Criando e Aplicando Migrations🔗

Com o contexto e as entidades prontos, podemos criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 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:

Isso vai criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 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!🔄 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!)🔄 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!🌍 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!🌍 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();
    }
}

Consultas Personalizadas🔗

Busca complexa com LINQ🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!Descubra como o LINQ facilita o processamento de dados em C#. Filtre, ordene e transforme coleções com precisão e eficiência no seu código.:

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!)🔄 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!📝 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🔗

bool ExisteConflito(DateTime inicio, DateTime fim)
{
    using var context = new AgendaContext();
    return context.Appointments.Any(a =>
        (inicio < a.DataFim) && (fim > a.DataInicio));
}

Desafio Prático🔗

Aprimore o sistema:

1. Adicione campo Status (enum🧩 Enumerações: Dê Significado a Números com '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!📡 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!🌍 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!🌍 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🔗

Compartilhar artigo

Artigos Relacionados