ASP .NET Core 5 - CRUD com EF Core 5 usando imagens


Hoje vamos iniciar a criação de um projeto web usando a ASP .NET Core 5.0 onde vamos realizar um CRUD com a ajuda do EF Core 5.0 e também mostrar como tratar imagens.

Como vamos usar as versões do .NET Core 5.0, EF Core 5.0 e ASP .NET Core 5.0 a primeira coisa a fazer é atualizar o seu ambiente para o .NET 5.

Para isso acesse os links abaixo e faça o download e a instalação das seguintes pacotes:

  1. SDK 5.0
  2. Visual Studio 2019 Community (16.8.0 ou superior)
  3. SQL Server Express 2017 (ou superior)

Vamos criar um protótipo para gerenciar eventos on-line com atuação de palestrantes onde vamos gerenciar as informações básicas do palestrante incluindo a sua foto.

Para gerenciar as informações vamos usar o EF Core 5.0 na abordagem Code-First.

Mãos a obra..

Criando o projeto ASP .NET Core MVC

Abra o VS 2019 Community e crie um projeto usando o template ASP.NET Core Web Application; 

A seguir vamos configurar o projeto informando o nome do projeto e localização e nome da solução conforme mostrado na figura a seguir:

Continuando selecione .NET Core e ASP .NET Core 5.0 e o template ASP .NET Core Web App(Model-View-Controller) :

Estamos definindo o HTTPs e habilitando a compilação em tempo de execução do Razor.

Ao final teremos o projeto MVC com a estrutura padrão gerada e pronta para ser utilizada.

Incluindo os pacotes do EF Core 5

Vamos incluir no projeto as referência para os seguintes pacotes do EF Core:

Podemos fazer isso via menu Tools do VS 2019 ou na janela do Package Manager Console usar o comando: install-package<>

Ao final o arquivo de projeto Palestras.csproj deverá apresentar as seguintes referências:

Definindo o modelo de domínio e o contexto

Na pasta Models vamos criar as entidades que vão representar o nosso modelo de domínio. Vamos usar classes POCO totalmente anêmicas e sem lógica alguma pois iremos usá-los apenas como DTO. Vamos criar apenas uma classe.

1- Palestrante

using System;
using System.ComponentModel.DataAnnotations;
namespace Palestras.Models
{
    public class Palestrante
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(100)]
        public string Nome { get; set; }
        [Required]
        [StringLength(200)]
        public string Qualificacao { get; set; }
        [Required]
        [StringLength(200)]
        public int Experiencia { get; set; }
        [Required]
        [DataType(DataType.Date)]
        [Display(Name = "Data")]
        public DateTime DataPalestra { get; set; }
        [Required]
        [DataType(DataType.Time)]
        [Display(Name = "Hora")]
        public DateTime HoraPalestra { get; set; }
        [Required]
        [StringLength(250)]
        public string Local { get; set; }
        [Required]
        public string Foto { get; set; }
    }
}

A seguir precisamos criar a classe de contexto que vai herdar de DbContext onde vamos mapear a entidade para tabela no SQL Server.

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

A seguir vamos registrar o contexto como um serviço no arquivo Startup no método ConfigureServices :

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<AppDbContext>(options =>
                 options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            services.AddControllersWithViews();
        }

E agora precisamos incluir no arquivo appsettings.json a string de conexão do banco de dados que iremos criar:

{
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=express;Initial Catalog=EventosDB;Integrated Security=True"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Agora já temos tudo pronto para aplicar a migração.

Assim abra uma janela no Nuget Package Manager e digite os comandos:

add-migration Inicial
update-database

Voilá, agora já temos o banco de dados EventosDB e a tabela Palestras criados no SQL Server.

Gerando o controlador via Scaffold

Vamos agora gerar o controlador via Scaffold de forma a obter além do controlador as respectivas views.

Para isso clique com o botão direito do mouse sobre a pasta Controllers e selecione Add-> New Scaffolded Item;

Na próxima janela marque a opção - MVC Controller with views, using Entity Framework e clique em Add;

Na janela a seguir complete os dados conforme mostra a figura abaixo:

Ao clicar em Add teremos a criação do Controlador PalestrantesController e das views na pastas Views/Palestrantes:

Vamos ajustar a view Index.cshtml da pasta Views/Home e no arquivo _Layout.cshtm da pasta Views/Shared vamos incluir um link para acessar a Action Index do controlador Palestrantes:

   ...
 <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
   <ul class="navbar-nav flex-grow-1">
       <li class="nav-item">
            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
       </li>
       <li class="nav-item">
           <a class="nav-link text-dark" asp-area="" asp-controller="Palestrantes" asp-action="Index">Palestrantes</a>
        </li>
     </ul>
   </div>
   ...

Executando o projeto teremos inicialmente a página inicial exibida:

Ao clicar no link Palestrantes teremos a página que exibe as informações dos palestrantes:

Na próxima parte do artigo vamos fazer os ajustes para exibir a imagem e os dados do palestrante criando as view models no projeto.

Pegue o código do projeto aqui:   EventosNet.zip (sem as referências)

"Quão grandes são, Senhor, as tuas obras! Mui profundos são os teus pensamentos."
Salmos 92:5

Referências:


José Carlos Macoratti