ASP .NET Core MVC - Criando um site com MySql e EF Core no Linux

 Neste artigo vamos criar uma aplicação ASP .NET Core MVC usando o Entity Framework Core e acessar o MySql e realizar o CRUD básico no ambiente Linux.

Se você estivesse em coma por uns 20 anos e acordasse hoje, e, se eu lhe dissesse que podemos criar uma aplicação web MVC acessando o MySQL sem usar a tecnologia ADO no ambiente Linux. Você poderia pensar que eu estou ficando doido ou que você esta delirando...

Mas nada disso, os tempos mudaram e a Microsoft agora esta aderente ao mundo open-source e multiplataforma.

Assim, neste artigo vamos criar uma aplicação Web MVC usando a ASP .NET Core 2.1 e acessando o banco de dados MySQL usando a ferramenta ORM Entity Framework Core 2.1.

Ainda esta duvidando ??? Então siga-me...

Primeiro vou mostrar como você deve configurar o seu ambiente Linux e depois vou mostrar como criar a aplicação usando as ferramentas todas open-source.

O ambiente Linux

Eu não sou um especialista no Linux, embora tenha usado o Unix, lá pelos idos de 1980, onde abria dezenas de instâncias de terminais de linha de comando para executar scripts batchs.

Então a linha de comando não me mete medo; na verdade eu me sinto muito à vontade com ela.

O ambiente Linux(a distro) que estou usando é o Ubuntu 18.04.1 LTS. É uma máquina física, mas você pode criar uma máquina virtual (Vide VirtualBox) que vai funcionar do mesmo jeito.

Instalando o .NET Core SDK 2.1

O .NET Core é o novo Framework open-source e multiplataforma da Microsoft.

Você tem que instalar a última versão estável no seu ambiente Linux.

Neste link você obtém a última versão estável do .NET Core que é a 2.1.403. Selecione a sua distribuição do Linux e siga as instruções para instalar no seu ambiente Linux.

Instalando o Visual Studio Code

O Visual Studio Code é o editor de códigos da Microsoft open-source e multiplataforma.

Para instalar o VS Code para Linux acesse o link : https://code.visualstudio.com/download escolha a sua distro Linux e siga as instruções.

Após instalar o VS Code você tem que instalar as seguintes extensões no VS Code para poder trabalhar com a linguagem C# :

  1. C#
  2. C# Extensions
  3. vscode-icons

Acima vemos as extensões instaladas no VS Code que eu estou usando.

Instalando o MySql

A versão curta da instalação é bem simples: atualize seu índice de pacotes, instale o pacote mysql-server, e então execute o script de segurança que vem incluído.

Ao executar o script de segurança defina a senha para o usuário root e pronto.

Apenas para verificar vamos acessar o MySQL digitando: mysql -u root -p

Informando a senha do root e digitando o comando show databases; vemos os bancos de dados do sistema.

Criando o projeto ASP .NET Core MVC

Abra um terminal de comandos no Linux e crie uma pasta onde o projeto vai ser armazenado usando os comandos mkdir para criar e cd para navegar entre as pastas.

Para o exemplo deste artigo eu crie uma pasta projetos e dentro dela outra pasta mvclinux onde vou criar o projeto ASP .NET Core MVC.

mkdir projetos
cd projetos
mkdir mvclinux
cd mvclinux

Posicionado na pasta onde vai criar o projeto digite o comando para criar o projeto ASP .NET Core MVC usando a ferramenta de linha de comando NET CLI:

dotnet new mvc

Este comando cria um projeto na pasta atual com o mesmo nome da pasta.

Digite o comando para exibir o conteúdo da pasta : ls -g

Vemos os arquivos e pastas do projeto criados na pasta atual.

Vamos abrir o código do projeto no Visual Studio Code digitando :  code .

Vemos acima o projeto aberto no VS Code no Linux e o arquivo de projeto .csproj mostrando as referências.

Incluindo os pacotes para o MySql

Para poder usar o Entity Framework core no projeto acessando o MySql temos que incluir o pacote com o provedor para o MySql.

Nota: Veja uma relação de provedores disponíveis neste link

Além disso temos que instalar os seguintes pacotes:

Para instalar um pacote usando a NET CLI usamos o comando : dotnet add package <pacote>

Agora digite os comandos abaixo para incluir os pacotes no projeto:

dotnet add package Pomelo.EntityFrameworkCore.MySql

dotnet add package Pomelo.EntityFrameworkCore.MySql.Design

dotnet add package Microsoft.EntityFrameworkCore.Tools

Terminando a execução dos comandos e abrindo o arquivo de projeto .csproj no VS Code devemos ver as referências aos pacotes:

Criando o nosso modelo de dados

Agora que temos o suporte ao EF Core vamos criar as classes das entidades para a nossa aplicação.

Como nossa aplicação é bem simples e vai gerenciar informações de livros ela vai ter apenas uma entidade chamada Livro.

Vamos agora criar  a classe que representa a nossa entidade na pasta Models do projeto.

Nota: Você pode colocar classes do modelo em qualquer lugar em seu projeto, mas a pasta Models é usada por convenção.

As classes são criadas na pasta Models clicando com o botão direito sobre a pasta, selecionando New C# Classs e a seguir informando o nome da classe.

Vamos iniciar criando o arquivo Livro.cs e nele vamos definir a classe Livro conforme abaixo:

using System;
namespace mvclinux.Models
{
    public class Livro
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Autor { get; set; }
        public int PublicadoEm { get; set; }
    }
}

A propriedade Id será a coluna de chave primária da tabela de banco de dados que corresponde a essa classe. Por padrão, o Entity Framework interpreta uma propriedade que é chamada de ID ou nome_classeID como sendo a chave primária.(Podemos alterar esse comportamento com annotations)

Nota : O Entity Framework por padrão adota algumas convenções (Conventions) que ele usa para realizar algumas operações.

Criando a classe de contexto do Banco de dados

O Entity Framework permite consultar, inserir, atualizar e excluir dados, usando objetos CLR(Common Language Runtime) conhecidos como entidades; ele mapeia as entidades e relacionamentos que são definidos no seu modelo de entidades para um banco de dados e fornece facilidades para realizar as seguintes tarefas:

1- Materializar dados retornados do banco de dados como objetos de entidade;
2- Controlar as alterações que foram feitas nos objetos;
3- Lidar com concorrência;
4- Propagar as alterações feitas nos objetos de volta ao banco de dados;
5- Vincular objetos a controles.

A principal classe responsável pela interação com os objetos de dados é a classe System.Data.Entity.DbContext (muitas vezes referida como o contexto).

Essa classe de contexto administra os objetos entidades durante o tempo de execução, o que inclui preencher objetos com dados de um banco de dados, controlar alterações, e persistir dados para o banco de dados.

A maneira recomendada para trabalhar com o contexto é definir uma classe que deriva de DbContext e expõe as propriedades de DbSet que representam as coleções das entidades especificadas no contexto.

Essa classe é chamada de classe de contexto do banco de dados e coordena a funcionalidade do Entity Framework para um dado modelo de dados. No código dessa classe você especifica quais entidades estão incluídas no modelo de dados. Você também pode personalizar determinado comportamento do Entity Framework. Neste projeto, a nossa classe de contexto será chamada AppDbContexto.

Para simplificar eu vou criar essa classe na pasta Models. Então crie o arquivo AppDbContext.cs na pasta Models e a seguir inclua o código abaixo na classe AppDbContext:

using Microsoft.EntityFrameworkCore;
namespace mvclinux.Models
{
    public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
        {
        }
        public DbSet<Livro> Livros { get; set; }
    }
}

Este código cria uma propriedade DbSet para cada a entidade Livro. Na terminologia Entity Framework, um conjunto de entidades corresponde a uma tabela de banco de dados e uma entidade corresponde a uma linha na tabela.

Registrando o contexto com injeção de dependência

A ASP.NET Core implementa a injeção de dependência por padrão. Os serviços (como o contexto de banco de dados do EF) são registrados com injeção de dependência durante a inicialização do aplicativo. Componentes que requerem esses serviços (como controladores MVC) fornecem esses serviços através de parâmetros do construtor. Mais adiante iremos definir no construtor do controlador a instância do contexto.

Para registrar o nosso contexto AppDbContext como um serviço, abra o arquivo Startup.cs e adicione as linhas realçadas ao método ConfigureServices:

using Microsoft.EntityFrameworkCore;
using mvclinux.Models;
...
....

// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ... var connection = Configuration["ConexaoMySql:MySqlConnectionString"]; services.AddDbContext<AppDbContext>(options => options.UseMySql(connection) );
            // Add framework services.
            services.AddMvc();
        }
....

O nome da string de conexão é passada para o contexto pela chamada do método no objeto DbContextOptionsBuilder. Para o desenvolvimento local a ASP .NET Core obtém a string de conexão do arquivo appsettings.json.

Vamos então abrir o arquivo appsettings.json e adicionar a string de conexão conforme mostrado a seguir:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConexaoMySql": {
    "MySqlConnectionString": "Server=localhost;DataBase=Livraria;Uid=root;Pwd=*******"
  }
}

A string de conexão especifica um banco de dados identificado pelo nome Livraria.

Nota: Informe um usuário e senha válidos para o seu ambiente.

Criando o banco de dados e tabela - Usando Migrations

Após definir o nosso modelo inicial representando pela classe Livro e definir o contexto na classe AppDbContext onde informamos o provedor do banco de dados usado, a string de conexão e o mapeamento da entidade para a tabela Livros, o EF Core tem todas as condições para criar o banco de dados Livraria e a tabela Livros usando o Migrations.

Usando o recurso Migrations do Entity Framework podemos realizar alterações em nosso modelo de entidades e ter a atualização automática do banco de dados refletindo essas mudanças.

Para aplicar o migrations vamos usar a ferramenta de linha de comando do EF Core digitando no terminal os seguintes comandos:

  1. dotnet ef migrations add InitialCreate - Para suportar a migração e criar o conjunto inicial de tabelas para o modelo;

  2. dotnet ef database update - Para aplicar a migração ao banco de dados;

Digitando o primeiro comando teremos o seguinte resultado:

Abrindo o projeto no VS Code, vemos a pasta Migrations criada no projeto contendo 3 arquivos:

  • 20181101131057_Inicial.cs o arquivo principal de migrações. Contém as operações necessárias para aplicar a migração (em Up()) e revertê-la (em Down()).
  • 20181101131057_Inicial.Designer.cs o arquivo de metadados de migrações. Contém informações usadas pelo EF.
  • AppDbContextModelSnapshot.cs um instantâneo do seu modelo atual. Usado para determinar o que mudou ao adicionar a próxima migração.
  • Abrindo o arquivo 20181101131057_Inicial.cs a vemos o scripts contendo os comandos para criar a tabela Livros definindo as colunas e chave primária :

    Digitando o segundo comando no terminal temos o resultado abaixo:

    Dessa forma já temos o banco de dados Livraria e a tabela Livros criados no MySQL no ambiente Linux.

    Acessando o MySql podemos constatar a criação do banco de dados Livraria conforme figura a seguir:

    Na próxima parte do artigo vamos criar o controller e as views para realizar o CRUD básico e gerenciar dados da tabela Livros.

    "Jesus respondeu: Na verdade, na verdade te digo que aquele que não nascer da água e do Espírito, não pode entrar no reino de Deus."
    João 3:5

    Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

    Quer migrar para o VB .NET ?

    Quer aprender C# ??

    Quer aprender os conceitos da Programação Orientada a objetos ?

    Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

      Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

    Referências:


    José Carlos Macoratti