segunda-feira, 27 de maio de 2013

LINQ to Entities

Utilizar LINQ to SQL é fácil,  mas só funciona com banco de dados MS-SQL.  

E se minha necessidade for utilizar o MySQL como banco de dados? Nesse caso teremos que utilizar o LINQ to Entities. O conceito é o mesmo e funciona para qualquer banco de dados.
Nesse caso eu vou utilizar o MySQL 5. 5.0.45.


Criei uma tabela com a seguinte estrutura:

Onde a coluna id  é por padrão incrementada 1 a 1.

Já no Visual Studio, precisamos adicionar uma conexão apontando para o MySQL.
Clique na guia Server Explorer e clique em adicionar conexão.  A janela a seguir irá aparecer:

Escolha MySQL e clique em ok.


Preencha os campos conforme seu banco de dados. No meu caso o nome do banco de dados é Projeto e esta localizada no Localhost. Vou usar o usuário root para acessar.

Após criar a conexão, é necessário adicionar o item ADO.NET Entity Data Model, como abaixo . Vou nomear o arquivo como Banco.edmx e clicar em Add. 



A janela a seguir será apresentada, escolha a opção “Generate from database”  e clique em Next.
Escolha a conexão para o banco de dados. E clique em Next.
Será apresentada a janela a seguir, nessa janela podemos escolher as entidades que vamos utilizar. No meu caso, somente a entidade usuário. Clique em Finish


Pronto, o mapeamento já foi feito e podemos trabalhar com a entidade criada.
Para inserir um registro faremos da seguinte maneira:
Banco bd = new Banco();//Representa o contexto do banco de dados

usuario u = new usuario();
u.nome = "Celso Zequim";
u.email = "czequim@gmail.com";
bd.AddTousuario(u);
bd.SaveChanges();

Ao pressionar F5, podemos ver que o registro foi inserido no Banco de dados:

Para ler essa informação e exibir no console é simples:

var usuarios = from ur in bd.usuario orderby ur.nome select ur;
foreach (usuario usr in usuarios)
{
       Console.Write(usr.nome);
       Console.WriteLine();               
}
           
O resultado é o seguinte:

Simples... e funciona para qualquer banco de dados, como: MySQL, Oracle, Postgres, Firebird... etc. 


:D


6 comentários:

  1. Muito bom o seu post!

    Mas estou com uma dúvida: no meu visualstudio nãoa aparece aquela opção do MySQL ao clicar em adicionar conexão. Preciso instalar alguma coisa? oO

    Muito obrigado.

    ResponderExcluir
    Respostas
    1. Olá,

      obrigado pelo comentário.

      o que acontece nesse caso é a falta do MySQL Connector.

      no meu caso eu tenho instalado o MySQL Connector Net 6.6.5.

      qualquer novidade me avise.

      um abraço.

      Excluir
    2. Muito obrigado pela resposta.

      Eu tenho instalado o 6.7.4.0, e achei no google que você precisa adicionar uma referência clicando com o botão direito no projeto e em Add Reference, e depois selecionar o MySql.Data e ok.

      Mas mesmo assim não aparece para mim essa opção ao tentar adicionar a conexão como na imagem do post.

      Sabe mais ou menos onde está o problema?

      Obrigadão pela ajuda. Abraços.

      Excluir
    3. Descobri qual era o problema:

      A partir da versão 6.7 (atual (27/08/2013)) o MySQL Conector não tem suporte nativo para a integração ao VisualStudio, no meu caso, 2012.

      Tem um aviso na página de download do MySQl Conector: http://dev.mysql.com/downloads/connector/net/

      Esse aviso diz isso e te fornece um link para download desse plugin (e mais) para o Visual Studio conectar ao MySQL como está na imagem do seu post: http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html

      Agora funcionou perfeitamente vou continuar o caminho do post aqui.

      Obrigado pela ajuda e Abraços.

      Excluir
    4. Nossa que chato isso.

      eu não tinha deparado com essa situação.

      mas foi bom você ter comentado.

      muito obrigado.

      um abraço.

      Excluir
    5. Só mais um comentário:

      Dependendo da versão, não será a mesma forma de persistência que você usou, pois no meu caso por exemplo seria:

      bd.usuario.Add(u);
      bd.SaveChanges();

      Funcionou perfeitamente.

      Outro detalhe é que estava dando uma NullReferenceException na linha do método SaveChanges().

      Para resolver isso é só trocar as referências dos MySql.* clicando no projeto com o botão direito e depois em Add Reference.

      Muito obrigado você. Esse foi o melhor post que encontrei falando disso. Já sou programador, mas estou totalmente cru na plataforma .NET.

      Abraços.

      Excluir