Académique Documents
Professionnel Documents
Culture Documents
Projeto Switch
Foi criado um projeto de nome Switch com a estrutura Other Project Types > Visual Studio Solutions
> Blank Solution , ou seja, uma solução em branco. Dentro dele, foram criadas as seguintes New Solution
Folder :
Domain ( Com projeto do tipo .NetCore > Class Library de nome Switch.Domain )
Onde vai conter todas as classes entidades na pasta Entities , e ainda a pasta Enums onde vai ser
guardado todos os enums, interface e Services .
Tests (Com projeto do tipo .NetCore > Class Library de nome Switch.Domain.Tests )
Infra
Onde terá duas Solution Folder , com toda a configuração do Entity Framework.
CrossCutting
Data: (Com projeto do tipo .NetCore > Class Library de nome Switch.Infra.Data )
Nela contém a pasta Config que vai conter toda configuração de cada campo da entidade. A pasta
Context , onde vai ter a classe que vai contar com a configuração com cada uma das classes do
domínio e a pasta Repositories onde nela vai estar implementada toda a inteligência para se
conectar com o banco de dados (Inserir, consultar).
Application (Com projeto do tipo .NetCore > Class Library de nome Switch.Application )
Através desse projeto que a API vai conseguir se comunicar com o Domain.
API (Com projeto do tipo .NetCore > ASP.NET CORE WEB APPLICATION de nome Switch.API )
Presentation
Foi alterado o projeto para inicialização para o Switch.API clicando nele com o direito e clicando em
Set as StartUp Project.
Primeira Entidade
Foi adicionado em Switch.Domain na pasta Entities a entidade Usuario :
using Switch.Domain.Enums;
using System;
namespace Switch.Domain.Entities {
public class Usuario {
public int Id { get; private set; }
public string Nome { get; set; }
public string Sobrenome { get; set; }
public string Senha { get; set; }
public DateTime DataNascimento { get; set; }
public SexoEnum Sexo { get; set; }
public string UrlFoto { get; set; }
}
}
namespace Switch.Domain.Enums {
public enum SexoEnum {
NaoDefinido = 1,
Feminino = 2,
Masculino = 3
}
}
using Microsoft.EntityFrameworkCore;
using Switch.Domain.Entities;
namespace Switch.Infra.Data.Context {
Para isso, adicionamos um arquivo do tipo Arquivo de Configurações do Aplicativo (.json) com nome
config.json no projeto Switch.API :
{
"ConnectionStrings": {
"SwitchDB": "Server=localhost;userid=root;password=admin;database=SwitchDB"
}
}
Definimos o nome da string que será referenciada no Startup.cs como SwitchDB . Server sendo o
localhost , o userid e o password que foi configurado no Mysql, e o database é o nome do Schema, que é
recomendado ser o mesmo nome da string de conexão ( SwitchDB ).
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Switch.Infra.Data.Context;
using Microsoft.EntityFrameworkCore;
namespace Switch.API {
public class Startup {
services.AddMvcCore();
}
Certifique-se que o Default Project será o pacote onde está o EF, no nosso caso, o Switch.Infra.Data e
que o Switch.API seja o projeto de startup.
Possa ser que ocorra um erro, pois a partir de um release do EF Core, foi necessário a inclusão do
pacote Microsoft.EntityFrameworkCore.Relational . Instale ele através do NuGet no pacote
Switch.Infra.Data com a mesma versão dos outros pacotes.
Um outro erro que pode acontecer, é o The configuration file config.json was not found onde fala
que não foi encontrado o arquivo config.json . Isso acontece porque no processo de compilação, deve-se
informar que o arquivo será copiado para o mesmo diretório de saída dos outros compilados do projeto. Para
resolver esse problema, clique com o direito encima do arquivo config.json , properties :
E deixar selecionado o Copy always , ou seja, copiar sempre.
Caso seja tudo configurado e o comando seja executado com êxito, o prompt retornará o seguinte resultado:
E após isso, será criado no projeto Switch.Infra.Data uma pasta Migrations com alterações no modelo.
Com a estrutura inicial do migrations, resta replicar tudo do migrations no banco de dados, com o comando
Update-database -Verbose onde o Verbose(Opcional) é somente para acompanhar os comandos que irão
ser executados.
Caso ocorra um erro do tipo Unable to connect to any of the specified Mysql hosts. verifique o
arquivo config.json e verifique se os dados estão corretos, além disso, verifique se o Mysql está
rodando.
Para isso, devemos entender sobre FLUENT API: Um padrão de programação que permite o mapeamento
das entidades utilizando uma linguagem de programação. Em versões antigas de ORM, o mapeamento era
realizado em arquivos externos xml , e a partir do FLUENT API, fazemos isso através do C#.
Para trabalhar com o FLUENT API, devemos ter acesso ao ModelBuilder(Construtor de modelos).
Para configurarmos explicitamente, iremos adicionar na pasta Config de Switch.Infra.Data uma classe
chamada UsuarioConfiguration com toda a configuração explicita de Usuario :
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Switch.Domain.Entities;
namespace Switch.Infra.Data.Config {
class UsuarioConfiguration : IEntityTypeConfiguration<Usuario> {
}
}
}
O método Configure recebe um EntityTypeBuilder como mencionado na imagem, e a partir dela existem
os métodos também descrito na imagem.
Após a configuração, devemos aplicar ao banco de dados com Add-Migration e Update-database -Verbose .
Toda vez que faz um migration a tabela é refeita, excluindo todos os dados antes existentes