Iniciando o Projeto

Banco de Dados

Banco de Dados SQL Server

O banco de dados SQL Server será disponibilizado a partir de container Docker.

Será utilizado o Subsistema do Windows para Linux

Acessar o Microsoft Artifact Registry, pesquisar por mssql e escolher a imagem. Neste caso, foi escolhida a image 2025-latest

Abrir o terminal e executar o wsl:

> wsl
$

Em seguida baixar a imagem escolhida:

$ docker pull mcr.microsoft.com/mssql/server:2025-latest
2025-latest: Pulling from mssql/server
95d90ad22b86: Pull complete
a640612140d3: Pull complete
ae76d5a26e47: Pull complete
Digest: sha256:54b23ca766287dab5f6f55162923325f07cdec6ccb42108f37c55c87e7688ebd
Status: Downloaded newer image for mcr.microsoft.com/mssql/server:2025-latest
mcr.microsoft.com/mssql/server:2025-latest

Conferir se a imagem foi baixada:

$ docker images | grep 2025
mcr.microsoft.com/mssql/server   2025-latest   55c3fe0f8428   6 weeks ago     1.79GB

Executar o container:

$ docker run -d \
  --name sqlserver2025 \
  -e "ACCEPT_EULA=Y" \
  -e "SA_PASSWORD=Sql@2025Secure!" \
  -p 1433:1433 \
  mcr.microsoft.com/mssql/server:2025-latest

8105494a92177bfde03fde9a4d40a1c894cc1f1d3f021fe4b052efb314fa07f5

Conferir se o container está sendo executado:

$ docker container ls
CONTAINER ID   IMAGE                                        COMMAND                  CREATED          STATUS          PORTS                    NAMES
8105494a9217   mcr.microsoft.com/mssql/server:2025-latest   "/opt/mssql/bin/laun…"   29 seconds ago   Up 28 seconds   0.0.0.0:1433->1433/tcp   sqlserver2025

A partir do Microsoft SQL Server Management Studio ou outra ferramenta acessar o banco de dados disponibilizado pelo container:

Mais referências:

Pode ser executado outro banco de dados e utilizado outro serviço para conexão ao banco de dados, pois o Repository Pattern não está atrelado ao Entity Framework nem ao banco de dados.

Criação do Projeto

Preparar o ambiente onde o projeto será criado. Neste caso foi utilizado o diretório C:\Dev\RepositoryStore\ para criar o projeto.

Criar o arquivo de configuração Global JSON

Listar os Software Development Kit (SDKs) do .NET instalados:

PS C:\Dev\RepositoryStore> dotnet --list-sdks
6.0.428 [C:\Program Files\dotnet\sdk]
9.0.100-preview.2.24157.14 [C:\Program Files\dotnet\sdk]
9.0.307 [C:\Program Files\dotnet\sdk]
10.0.100 [C:\Program Files\dotnet\sdk]

Criar o arquivo de configuração do .NET para definir qual SDK do .NET será usado:

PS C:\Dev\RepositoryStore> dotnet new globaljson --sdk-version 10.0.100

Verificar arquivo de configuração:

PS C:\dev\RepositoryStore> cat .\global.json
{
  "sdk": {
    "version": "10.0.100"
  }
}

Criação do projeto:

PS C:\Dev\RepositoryStore> dotnet new web
O modelo "ASP.NET Core Vazio" foi criado com êxito.

Processando ações pós-criação...
Restaurando C:\Dev\RepositoryPattern\RepositoryStore\RepositoryStore.csproj:
A restauração foi bem-sucedida.

Acesso ao diretório do projeto criado:

Instalação dos Pacotes

Adicionar os pacotes necessários para trabalhar com o Repository Pattern. Será utilizado o Entity Framework, mas pode-se utilizar outras ferramentas.

Instalação dos pacotes:

Microsoft.EntityFrameworkCore.SqlServer

Instalação


O que ele é, de verdade

O Microsoft.EntityFrameworkCore.SqlServer é o provider de banco de dados do Entity Framework Core para SQL Server.

Ele é a implementação concreta de persistência que permite ao Entity Framework comunicar-se corretamente com o SQL Server. Arquiteturalmente, pertence exclusivamente à camada de infraestrutura.

Esse pacote nunca aparece no domínio nem nas interfaces de repositório.


Responsabilidades técnicas

Na prática, o provider é responsável por:

  • traduzir expressões LINQ → T-SQL

  • mapear tipos do .NET para o SQL Server:

    • datetime2

    • nvarchar

    • decimal

  • gerenciar:

    • identity e sequences

    • transações

    • locking e concorrência

  • aplicar otimizações específicas do SQL Server

Tudo isso é detalhe técnico de persistência.


Dentro do Repository Pattern

Onde ele deve estar

  • Projeto de Infraestrutura

  • Camada de persistência concreta

  • Implementação real dos repositórios

Onde ele não deve aparecer

  • Interfaces de repositório

  • Camada de domínio

  • Application Services / Use Cases


Exemplo conceitual

O domínio não sabe que o banco é SQL Server. Se amanhã a persistência mudar para PostgreSQL, o contrato permanece o mesmo.


Resumo direto

  • É o provider do EF Core para SQL Server

  • Implementação concreta de persistência

  • Vive na infraestrutura

  • Não vaza para o domínio

  • Não define contratos

No Repository Pattern, ele é meio, não regra.

Microsoft.EntityFrameworkCore.Design

Instalação


O que ele é, de verdade

O Microsoft.EntityFrameworkCore.Design é um pacote de tooling do Entity Framework Core.

Ele não é runtime. Ele existe exclusivamente em tempo de design para dar suporte ao desenvolvedor durante a construção e manutenção da infraestrutura de dados.

Esse pacote não participa da execução da aplicação e não faz parte do Repository Pattern em funcionamento.


Para que ele serve

O pacote fornece ferramentas utilizadas durante o desenvolvimento, como:

  • Add-Migration

  • Update-Database

  • Scaffold-DbContext

  • geração e manutenção de migrations

  • versionamento do schema do banco

Ou seja:

  • ajuda o desenvolvedor

  • apoia a evolução da infraestrutura

  • não interfere no fluxo da aplicação


Dentro do Repository Pattern

Uso legítimo

  • evoluir o schema do banco

  • versionar estrutura de dados

  • gerar código inicial da camada de infraestrutura

Uso ilegítimo

  • referenciar no domínio

  • considerar parte da arquitetura do pattern

  • tratar como dependência de runtime


Ponto essencial

O Microsoft.EntityFrameworkCore.Design:

  • não participa do repositório em execução

  • não define contratos

  • não influencia regras de negócio

  • existe apenas para criar e manter a implementação concreta da persistência


Resumo direto

  • pacote de tooling

  • uso em tempo de design

  • suporte ao desenvolvedor

  • não faz parte do Repository Pattern em runtime

No contexto do Repository Pattern, ele apoia a construção da infraestrutura, mas não faz parte do funcionamento do repositório.

Neste momento, isso é tudo o que é necessário para dar início ao projeto.

Atualizado