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
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:
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.
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