{"id":2701,"date":"2020-07-22T15:30:00","date_gmt":"2020-07-22T18:30:00","guid":{"rendered":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/?p=2701"},"modified":"2025-09-02T15:08:07","modified_gmt":"2025-09-02T18:08:07","slug":"entity-framework","status":"publish","type":"post","link":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/2020\/07\/22\/entity-framework","title":{"rendered":"Entity Framework"},"content":{"rendered":"\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

Ol\u00e1 Pessoal, nessa edi\u00e7\u00e3o do PET Reda\u00e7\u00e3o iremos aprender um pouco sobre uma das principais ferramentas de mapeamento objeto-relacional para C#, o Entity Framework<\/strong>. Mas enfim, o que \u00e9 Mapeamento objeto-relacional e o que \u00e9 Entity Framework? Continue lendo para conhecer mais sobre este assunto.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\u00a0<\/div>\n
\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\nO que \u00e9 mapeamento objeto-relacional? <\/span><\/strong><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n

O\u00a0ORM<\/strong>\u00a0(object-relational mapping) \u00e9 uma t\u00e9cnica que visa aproximar a ideia do desenvolvimento orientado a objetos, normalmente utilizada em aplica\u00e7\u00f5es, ao modelo relacional do banco de dados, mapeando os dados a partir de classes e vice-versa. Dessa forma, pode-se economizar tempo desenvolvendo sua base de dados na mesma linguagem usada na aplica\u00e7\u00e3o, sem necessidade de escrever instru\u00e7\u00f5es SQL.<\/p>\n

Existem ORMs para as mais diversas linguagens de programa\u00e7\u00e3o, por\u00e9m hoje vamos conhecer um em espec\u00edfico, o Entity Framework.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\u00a0<\/div>\n
\n
\n
\n
\u00a0<\/div>\n<\/div>\n<\/div>\nO que \u00e9 Entity Framework? <\/span><\/strong><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
\n
\n
\n
\n

O\u00a0Entity Framework<\/strong>\u00a0\u00e9 um exemplo de ORM. Desenvolvido para aplica\u00e7\u00f5es C#, ele possui tr\u00eas estrat\u00e9gias para relacionar-se com o banco de dados: Database First, Model First e Code First.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

\n
\n
\n
\n
    \n
  1. \n

    Database First:\u00a0<\/strong>Tem a fun\u00e7\u00e3o de auxiliar projetos que j\u00e1 possuem um banco de dados estabelecido, realizando uma engenharia-reversa, criando um modelo de dados, chamado\u00a0EDM<\/strong>\u00a0(Entity Data Model), que \u00e9 uma representa\u00e7\u00e3o visual da base de dados, baseado em XML. Por fim, resultando nas classes necess\u00e1rias, de acordo com as tabelas no banco de dados.<\/p>\n<\/li>\n

  2. \n

    Model First:\u00a0<\/strong>Muito semelhante ao Database First, pois tamb\u00e9m \u00e9 focado no desenvolvimento gr\u00e1fico com\u00a0EDM<\/strong>, mas, diferentemente, o Model First \u00e9 utilizado quando a base de dados ainda n\u00e3o est\u00e1 criada. Dessa forma, todas as tabelas e relacionamentos s\u00e3o feitos visualmente.<\/p>\n<\/li>\n

  3. \n

    Code First:\u00a0<\/strong>\u00c9 o mais distante dos \u00faltimos vistos, pois o foco \u00e9 totalmente no desenvolvimento. Ao contr\u00e1rio do Database First, primeiramente, cria-se as classes, ent\u00e3o o EntityFramework cria sua base de dados e suas tabelas, baseado nas classes desenvolvidas.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\nImplementa\u00e7\u00e3o <\/span><\/strong><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n

    Passada a ideia geral de cada estrat\u00e9gia, agora iremos focar e implementar uma delas: o\u00a0Code First<\/strong>. Para isso, ser\u00e1 necess\u00e1rio a instala\u00e7\u00e3o do\u00a0<\/a>Visual Studio Community<\/a>\u00a0(n\u00e3o \u00e9 o Code) e, para controlar o nosso banco de dados, o\u00a0<\/a>SQL Server Express<\/a>\u00a0(somente para ter as inst\u00e2ncias) e o\u00a0<\/a>SQL Server Management Studio<\/a>\u00a0(para visualizar e conectar com o servidor), conhecido como SSMS. N\u00e3o se assuste, o SQL Server Express \u00e9 s\u00f3 baixar, para conseguirmos conectar ao servidor pelo SSMS, que abriremos somente para conectar e para visualizar o resultado final.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

    \n
    \n
    \n
    \n

    Realizadas as instala\u00e7\u00f5es, o primeiro passo \u00e9 conectar-se com o servidor local da sua m\u00e1quina, a partir do SQL Server. Para descobrir o nome da sua m\u00e1quina \u00e9 necess\u00e1rio entrar nas propriedades do seu computador, clicando com o bot\u00e3o do mouse em\u00a0Este Computador<\/em>. Segue a imagem abaixo:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Ao clicar em propriedades aparecer\u00e1 uma tela, no qual ter\u00e1 uma campo chamado Nome do Computador e \u00e9 s\u00f3 copi\u00e1-lo. Feito isso, podemos abrir o SQL Server Management Studio e ir\u00e1 aparecer uma janela (imagem abaixo). No campo\u00a0Nome do Servidor<\/em>, cole o Nome do Computador, que foi copiado anteriormente, seguido por\u00a0\\SQLEXPRESS<\/em>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Realizada a conex\u00e3o com o servidor local, agora podemos come\u00e7ar o desenvolvimento. Abrindo o Visual Studio aparecer\u00e1 uma tela, clique em\u00a0Criar um Projeto<\/em>. Passado isso, iremos escolher o tipo e o nome do projeto. O tipo do projeto, neste caso, vai ser\u00a0Aplicativo de Console (.NET Framework)<\/strong>, como est\u00e1 representado na imagem abaixo. Clicando em pr\u00f3ximo, preencha o nome como\u00a0MeuProjetoPET\u00a0<\/strong>(mas pode ser qualquer um).<\/p>\n

    \"\"<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Criado nosso projeto, agora podemos abrir a classe padr\u00e3o\u00a0Program.cs\u00a0<\/em>no Gerenciador de Solu\u00e7\u00f5es. Caso ela n\u00e3o esteja vis\u00edvel, segue o caminho:<\/p>\n

    Exibir \u2192 Gerenciador de Solu\u00e7\u00f5es <\/em><\/p>\n

    Dentro da classe\u00a0Program.cs,<\/em>\u00a0criaremos uma outra classe, que futuramente ser\u00e1 uma tabela do nosso banco de dados, chamada\u00a0Pessoa.\u00a0<\/em>Essa classe ter\u00e1 como atributos: um id (identificador inteiro), um nome (string) e um telefone (string). Ficando assim:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Antes de continuar programando devemos instalar o Entity Framework, para usar todos recursos da ferramenta. Para isso, utiliza-se o Console do Gerenciador de Pacotes (NuGet). Ele pode ser acessado pela seguinte sequ\u00eancia:<\/p>\n

    Ferramentas \u2192 Gerenciador de Pacotes do Nuget \u2192 Console do Gerenciador de Pacotes<\/em><\/p>\n

    Seguindo a sequ\u00eancia, abrir\u00e1 um console (parecido com o cmd) na parte inferior do Visual Studio. Ent\u00e3o, escreva o seguinte comando:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Instalado o Entity, criaremos a conex\u00e3o da nossa aplica\u00e7\u00e3o com o servidor local, a partir de uma\u00a0connectionString<\/em>. Essa conex\u00e3o deve ser criada no arquivo\u00a0App.config\u00a0<\/em>(dentro da\u00a0<configuration><\/em>), tamb\u00e9m localizado no Gerenciador de Solu\u00e7\u00f5es. Na imagem abaixo, como par\u00e2metro temos: o\u00a0name\u00a0<\/em>(pode ser qualquer nome, por\u00e9m usaremos ele mais tarde), a\u00a0connectionString<\/em>\u00a0e o\u00a0providerName\u00a0<\/em>(padr\u00e3o). Na\u00a0connectionString<\/em>, o\u00a0Data Source<\/strong>\u00a0deve ser igual ao usado no SQL Server anteriormente, o\u00a0Initial Catalog<\/strong>\u00a0ser\u00e1 o nome do seu banco quando executarmos o programa (pode ser qualquer nome) e o\u00a0Integrated Security<\/strong>\u00a0\u00e9 padr\u00e3o.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Continuando a programa\u00e7\u00e3o no Program.cs<\/em>, incluiremos a seguinte linha de c\u00f3digo, para acessar os recurso do Entity:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Com o Entity dispon\u00edvel, ainda dentro do arquivo Program.cs, agora podemos criar nossa pr\u00f3xima classe, chamada Contexto. O Contexto \u00e9 respons\u00e1vel por manter e gerenciar as classes que fazem parte da camada de dados. Utilizando a fun\u00e7\u00e3o\u00a0DbSet<>,<\/em>\u00a0definimos que a classe\u00a0Pessoa\u00a0<\/em>pertence ao contexto de dados.<\/p>\n

    \u00a0<\/div>\n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n– <\/span>Lembra que ir\u00edamos utilizar o <\/span>name <\/em><\/span>da <\/span>connectionString<\/em><\/span>? <\/span><\/div>\n

    Vamos utilizar agora.\u00a0Dentro da fun\u00e7\u00e3o\u00a0base<\/em>()\u00a0<\/em>informaremos qual a\u00a0connectionString\u00a0<\/em>que queremos usar, ent\u00e3o lembre-se de colocar de acordo com o escrito na sua\u00a0connectionString.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Para finalizar o desenvolvimento, ainda n\u00e3o mexemos na fun\u00e7\u00e3o\u00a0Main\u00a0<\/em>do\u00a0Program.cs<\/em>. N\u00e3o se assuste com o tamanho dela, comparado com as outras, n\u00e3o \u00e9 dif\u00edcil de entender. Basicamente,\u00a0ela chama o nosso Contexto, utilizando a vari\u00e1vel\u00a0banco<\/em>, para acessar a nossa classe\/entidade. Ap\u00f3s isso, h\u00e1 uma entrada de dados com o nome e telefone da pessoa. Depois receber os dados da pessoa, iremos inseri-los na tabela\u00a0Pessoas<\/em>, a partir da fun\u00e7\u00e3o\u00a0Add()<\/em>\u00a0e salvar as altera\u00e7\u00f5es com a fun\u00e7\u00e3o\u00a0SaveChanges()<\/em>. Somente essa parte de c\u00f3digo j\u00e1 realizaria o Code First, criando a base de dados e a tabela , o resto do c\u00f3digo \u00e9 uma demonstra\u00e7\u00e3o de consulta para listar as pessoas cadastradas no banco (no nosso caso vai ser s\u00f3 uma).\u00a0A vari\u00e1vel\u00a0query\u00a0<\/em>utiliza um componente de consulta, semelhante com uma instru\u00e7\u00e3o SQL, chamado Linq. Por padr\u00e3o, o Linq j\u00e1 \u00e9 inclu\u00eddo em todos os c\u00f3digos C#.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Para executar \u00e9 s\u00f3 clicar em iniciar, na parte superior do Visual Studio. Feito isso, abrir\u00e1 um console que vai pedir os dados de uma pessoa qualquer. Ap\u00f3s o preenchimento, ele come\u00e7ar\u00e1 a cria\u00e7\u00e3o do banco de dados e da tabela\u00a0Pessoas<\/em>\u00a0(esse processo normalmente \u00e9 demorado). Para verificar se est\u00e1 correto, ele tenta buscar os dados no banco e retornar o nome e o telefone das pessoas cadastradas na tabela\u00a0Pessoas<\/em>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    No SQL Server Management Studio, podemos visualizar o banco criado, juntamente com a tabela Pessoas.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \"\"<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Para ter acesso ao\u00a0Program.cs<\/em>\u00a0e o\u00a0App.config<\/em>, desenvolvidos ao longo da reda\u00e7\u00e3o, \u00e9 s\u00f3 acessar este\u00a0<\/a>reposit\u00f3rio<\/a>.<\/p>\n

    Caso queria aprender mais e implementar um Database First ou Model First em uma aplica\u00e7\u00e3o C#, segue\u00a0este\u00a0<\/a>link<\/a>.<\/p>\n

    Para quem programa em outra linguagem, este\u00a0<\/a>link<\/a>\u00a0possui mais conte\u00fado sobre ORMs e os principais para cada linguagem no mercado.<\/p>\n

    Com isso, compreendemos um pouco mais sobre ORMs e Entity Framework, implementando um Code First simples, podendo ser alimentado com outras classes e m\u00e9todos, auxiliando e facilitando o desenvolvimento de projetos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n

    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \u00a0<\/div>\n
    \n
    \n
    \n
    \u00a0<\/div>\n<\/div>\n<\/div>\nRefer\u00eancias<\/strong><\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n
    \n
    \n
    \n
    \n