Hello Coders! :)
Passei alguns dias me batendo para fazer o curso de Desenvolvimento de aplicações com .NET (com o Anderson Clavico Moreira) e resolvi compartilhar com vocês o que eu aprendi por aqui. O problema é que eu tenho um SO Ubuntu e uso o VS Code. Assim, as facilidades do Visual Studio geram um pouco de frustração se você não está rodando uma VM. Por isso, resolvi dar dicas para quem quer fazer, ao menos a primeira aula do Anderson Moreira, no ambiente Linux mesmo.
A solução é usar o dotnet pelo console (usei o aprendizado da aula do Gabriel Faraday). Então... vou passar aqui didaticamente pelas etapas da aula, adaptando o que o Anderson faz no Visual Studio para os comandos através do terminal.
1) Criação do MVC:
dotnet new mvc -n <O-NOME-DA-SUA-APLICAÇÃO-AQUI>
2) Compilar e Rodar:
Sempre que você quiser compilar e rodar a aplicação, como o Anderson faz várias vezes durante a aula, você pode usar
dotnet build dotnet run
Esse último comando vai te passar o link da aplicação, que você pode checar com Ctrl + click no link.
3) Criação das classes Model:
Não encontrei uma forma automática de criar as classes Model. Acabei fazendo à mão mesmo, inclusive para os imports no início de cada arquivo.
4) Instalação de pacotes:
Logo depois de criar a classe Categoria, o Anderson faz a instalação de dois pacotes. Os nomes dos pacotes são os mesmos que ele usa por lá, mas o comando no CLI é
dotnet add package <NOME-DO-PACOTE>
Por exemplo, os primeiros pacotes que ele instala são
dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Tools
5) Classe Context e string de conexão:
Quando ele cria a classe Context.cs, é necessário uma string de conexão. Aí a coisa complica, porque o Linux não suporta o LocalDB. Aí eu recomendo essa leitura: SQL Server on Linux (eu fiz os passos da instalação para Ubuntu e foi bem tranquilo).
Tendo instalado o SQL Server para Linux, você pode adaptar a string de conexão para algo como
optionsBuilder.UseSqlServer("Server=localhost; Database=<NOME-DO-SEU-BANCO>, User Id=SA; Password=<SUA-SENHA-DE-ADMINISTRADOR-DO-BANCO>");
Importante notar que, na instalação do SQL Server, ele vai pedir para você configurar uma senha de administrador, por isso tive que trocar a forma de conexão.
6) Migrations:
Na hora de trabalhar com o Migrations, os comandos de criação e de atualização são os que seguem
dotnet ef migrations add InitialCreate dotnet ef database update
Se você quiser ver o que está sendo feito e criado, inclua a opção "-v" no comando, dessa forma
dotnet ef database -v update
7) Scaffolding e a geração dos controllers:
Para usar o scaffolding e para ter a geração automática dos controllers, vamos precisar de outras coisinhas. Primeiro você vai precisar do ASP.NET Core scaffolder
dotnet tool install -g dotnet-aspnet-codegenerator
Depois você vai precisar dos seguintes pacotes
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design
Se precisar, aqui tem mais ajuda.
Aí tem alguns bugs nas versões mais recentes, então vamos precisar de uns arquivos que faltam (se quiserem conferir, aqui está o problema). Um por vez, opere os seguintes comandos no terminal (você precisa estar dentro da pasta do projeto para dar certo)
mkdir Templates && mkdir Templates/ControllerGenerator && mkdir Templates/ViewGenerator cp -r /home/$USER/.nuget/packages/microsoft.visualstudio.web.codegenerators.mvc/5.0.1/Templates/ControllerGenerator/* ./Templates/ControllerGenerator cp -r /home/$USER/.nuget/packages/microsoft.visualstudio.web.codegenerators.mvc/5.0.1/Templates/ViewGenerator/* ./Templates/ViewGenerator/ mkdir Templates/DbContext cp -r /home/helena/.nuget/packages/microsoft.visualstudio.web.codegeneration.entityframeworkcore/5.0.1/Templates/DbContext/* ./Templates/DbContext
Agora a gente consegue gerar automaticamente o código das controllers. Para isso, use o seguinte comando
dotnet aspnet-codegenerator controller -name CategoriasController -m Categoria -dc Context --relativeFolderPath Controllers --useDefaultLayout
Onde "CategoriasController" é o nome do controller, "Categoria" é o modelo usado e "Context" é o contexto usado. Depois, você só precisará mudar o comando para o outro controller que é criado.
8) Adicionar tabela no Migrations:
Depois de criar a classe Produto.cs, o comando para a criação da tabela muda pouca coisa
dotnet ef migrations -v add TabelaProduto
Depois é só dar um update de novo
dotnet ef database update
A criação da Web API com o swagger eu ainda não desvendei por completo, mas, quando eu conseguir, atualizo o artigo. :)
Valeu!
Helena Maximo
30/12/2020 10:55