CRUD ASP.net CORE – 03 Iniciando CRUD Cliente

Código fonte: https://github.com/waltercoan/faegaspnetcore2019 

Arquitetura 

  • O primeiro passo é criar em nosso projeto um novo pacote chamado Models, dentro deste pacote vamos criar nossa classe Client.cs 
  • Nesta classe vamos definir os dados que representam um Cliente e que serão armazenados no banco de dados. Observer que sobre o atributo Id colocamos a anotação [Key, DatabaseGenerated… para informar ao EFCore que o atributo Id é a chave primária e seu valor deve ser gerado automaticamente por uma Identity no banco de dados. 
  • Agora vamos criar uma nova pasta no projeto com o nome de Db, e dentro dela uma nova classe chamada AppDbContext. O objetivo desta classe é permitir a conexão com o banco de dados.  
  • Nesta nova classe AppDbContext, vamos herdar da classe DbContext, criar um método contrutor que recebe parâmetros de configuração da conexão com o banco e passa esses parâmetros para a super classe. Criamos uma propriedade DbSet do tipo Client para que o Entity Framework reconheça a classe de modelo, e sobre escrevemos o método OnModelCreating para alimentar o banco de dados com uma nova entidade. 

A sequência de comandos abaixo deve ser executada em caso de utilização do Visual Studio Code Online (Codspaces) com o banco SQLite.

export DOTNET_ROOT=$(dirname $(realpath $(which dotnet)))
export PATH="$PATH:$HOME/.dotnet/tools"
dotnet tool uninstall --global dotnet-ef
dotnet tool install --global dotnet-ef --version 3.0.0
dotnet add package Microsoft.Data.Sqlite.Core --version 3.1.4
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design

Caso você esteja programando em um ambiente na sua máquina local utilize os comandos.

dotnet tool uninstall --global dotnet-ef
dotnet tool install --global dotnet-ef --version 3.0.0
dotnet add package Microsoft.Data.Sqlite.Core --version 3.1.4
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
  • Em seguida alteramos o arquivo appsettings.json para incluir a string de conexão com o banco de dados, utilizando o SQLServer LocalDB 
Caso utilize SQLServer

Utilize o código abaixo para SQLite.

{
  "ConnectionStrings": {
    "AppDbContext": "DataSource=app.db"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}
  • Agora precisamos instalar as bibliotecas do Entity Framework para o SQLServer, para isso abra o console CMD na pasta do projeto asp.net Core e digite o comando: 
Caso utilize o SQLServer

Utilize o comando abaixo caso utilize o SQLite. (caso não tenha executado esse comando anteriormente)

dotnet add package Microsoft.Data.Sqlite.Core --version 3.1.4
  • Agora podemos alterar o código da classe Startup.cs, para incluir o código necessário para carregar o DbContext AppDbContext dentro da nossa aplicação considerando a string de conexão informada no arquivo de configuração.  
Caso utilizar o SQLServer

Utilize o código abaixo para SQLite

services.AddDbContext<AppDbContext>(options =>
options.UseSqlite(Configuration.GetConnectionString("AppDbContext")));
  • Em seguida podemos retornar ao console e executar o comando para criar a primeira versão da configuração de migração do nosso banco de dados 

Se você estiver no Visual Studio Online, digite estes comandos antes do próximo passo.

export DOTNET_ROOT=$(dirname $(realpath $(which dotnet)))
export PATH="$PATH:$HOME/.dotnet/tools"
  • E devemos executar o comando para aplicar as migrações e atualizar o banco de dados. 
  • Os arquivos do banco de dados SQLServer serão criados na pasta c:\users\SEUUSUARIO 

Caso você esteja utilizando o Visual Studio Code com o SQLite executar os seguintes comandos a partir da pasta principal do projeto.

  • Agora vamos criar nossa pasta, interface e classe de serviço 
  • Na interface de serviço vamos definir o método do código necessário para recuperar do banco de forma assíncrona todos os registros 
  • Então criamos nossa classe concreta para implementar a consulta. Observe que deve ser inserido no código o using Microsoft.EntityFrameworkCore para ter acesso aos métodos do DbSet<Client> . Essa classe receberá por injeção de dependência a instância da classe DbContext de forma automática, bastanto ter um construtor com o parâmetro. O metodo GetAll() utiliza chamada assíncrona async/await para consultar o banco de dados. 
  • Por fim precisamos alterar nossa classe Startup.cs para incluir no método ConfigureService a dependência para o servico IClientService. 
  • Em seguida vamos criar dentro da pasta Controller uma nova classe C# chamada ClientController. 
  • Essa classe Controller deve herdar a classe abstrata Controller, então foi criado o construtor que deve receber a dependência do nosso serviço. Então criamos nossa Action Index que chama o serviço para executar a consulta e retornar os dados para a View() 
  • Então criar a pasta Client dentro da pasta Views, e então criamos nosso arquivo de view. 
  • Dentro da view nos definimos nosso objeto Model que será uma lista de Client. Então construímos uma table que será carregada com os dados. 
  • Ao executar nossa aplicação