Blog Maurício Luís -

Tecnologia e programação web - Consultoria em análise e desenvolvimento de sistemas. Action Script, VB.NET, C#, ASP, PHP, MySQL, SQL Server. Magento, Drupal, Joomla, Wordpress e etc.

11 mai, 2010

Iniciando no Linq to Entities com MySQL

Categoria: .NET

Este tópico tem como principal objetivo passar de maneira superficial o conceito do o framework de acesso a dados Entity Framework que consiste na abstração do banco de dados em entidades orientadas a objetos, dispensando assim o conhecimento - por parte do programador - da tecnologia SQL.

Basicamente precisaremos de um banco de dados MySQL. Mas caso não seja possível, poderá utilizar qualquer outro banco de dados, desde que tenha o provider devidamente instalado no Visual Studio (exceto no caso do SQL Server que já é nativo do Visual Studio).

Em um novo tópico, farei uma abordagem mais avançada do Entity Framework.

Aprenda a utilização básica do Linq to Entities, mas antes de iniciarmos, vamos criar uma tabela simples, em seu banco de dados MySQL para criarmos o GridView para listarmos as “frutas cadastradas no sistema”:

CREATE TABLE `FRUTAS` (
  `FrutaID` int(11) NOT NULL AUTO_INCREMENT,
  `Nome` varchar(30) NOT NULL,
  `Descricao` varchar(200) NOT NULL,
  PRIMARY KEY (`FrutaID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

INSERT INTO `FRUTAS` (`FrutaID`, `Nome`, `Descricao`) VALUES
(1, 'Maçã', 'A maçã, além de saborosa, tem considerável valor nutritivo.'),
(2, 'Laranja', 'A vitamina C, elemento nutritivo mais importante da laranja, se oxida e se perde com facilidade.'),
(3, 'Banana', 'A banana é a fruta mais consumida no Mundo e no Brasil.'),
(4, 'Uva', 'A uva é o fruto da videira (Vitis sp.), uma planta da família das Vitaceae.'),
(5, 'Melancia', 'Melancia (Citrullus lanatus) é o nome de uma planta da família Cucurbitaceae e do seu fruto. ');

PASSO 1:

Crie uma nova aplicação web C#, e arraste dois controles para a página principal Default.aspx, sendo:

Button - instancie-o com o id “btnCriarFruta”
Gridview - instancie-o com o id “GridView1″

Aprendendo Ado.Net Entity Framework Linq to Entities

Basicamente o código deve ficar assim no ASP.NET:

PASSO 2:

Clique com o botão direito e adicione um novo repositório clicando em: ADD > New Item > “ADO.NET Entity Data Model” > e entre com o nome “Banco1.edmx”.

Adicionando um novo entity data model

Clique em ADD para criar o novo repositório.

PASSO 3:

Aparecerá então uma nova janela para você optar entre gerar um data model a partir do banco de dados que você informará, ou um data model vazio onde você irá criar todas as entidades.

Selecione a opção “Generate from database” e clique em “Next”.

Criando um novo Entity Data Model Linq To Entities a partir de um banco de dados MySQL

PASSO 4:

Na nova janela, clique na opção “New connection” e informe os dados de acesso ao seu banco de dados. Teste a conexão clicando no botão “Test connection” para se certificar de que as informações do banco estão corretas.

Criando conexão com banco de dados MySQL .NET C# Entity Framework

Em seguida, feche a janela de nova conexão e então marque a opção:

“No, exclude sensitive data from the connection string. I will set in my application code.”

Exclude sensitive data web applications

A partir do ASP.NET 2.0, um recurso chamado “Protected Configuration” foi disponibilizado para permitir a criptografia de informações confidenciais em arquivos de configuração - como é o caso da connection string criada pelo Entity Framework. Mas não iremos utilizá-la neste momento, por isso estamos descartando.

Coloque o nome do banco de entidades como “banco1Entities” e em sguida clique em “Next”.

PASSO 5:

Selecione a tabela desejada, no nosso caso, como o banco só possui uma tabela, selecionei todas as tabelas. Mas poderíamos selecionar apenas determinadas tabelas (assim como Views e StoredProcedures) para serem importados para o nosso entity data model.

Mantenha o nome do DataModel como “banco1Model” e em seguida clique em “Finish” para finalizar a construção do nosso data model.

Mapeando entidades repositório Entity Data Model

Ao clicar em “Finish”, verifique em sua solution que uma connection string diferenciada foi criada em seu web.config.

Visualização do nosso Entity Data Model com a entidade Frutas mapeada. Perceba que o visual é semelhante ao de visualização de diagrama de classes. Isto se deve ao fato de que ambos são quase a mesma coisa. Agora, uma fruta em nosso sistema é uma classe.

Entidade mapeada no entity data model

PASSO 6:

Criaremos agora em nosso arquivo code behind “Default.aspx.cs” um novo método para cadastrar uma nova fruta no repositório. Equivalente ao INSERT do SQL. Para isto, daremos dois cliques no botão criado anteriormente para que este método seja gerado.

Neste método criaremos uma instancia do contexto do banco de dados:

protected void btnCriarFruta_Click(object sender, EventArgs e)
        {
            using (var db = new banco1Entities())
            {

            }
        }

Utilizando o “using” no C# 4.0, não é necessário fechar o contexto pois a conexão e o objeto serão eliminados na chave que fecha o seu statement.

Agora, criaremos o equivalente ao insert do sql no linq to entities:

Utilizando intelesense para métodos do entity framework

Perceba que ao chamarmos o contexto (”db”) aparecerão métodos básicos para gerenciamento de dados no nosso banco de dados, ou melhor, no nosso contexto do banco de dados. As transações efetuadas até este momento, são simplesmente desconectadas e só valerão efetivamente quando chamarmos o método para salvar as modificações (utilizaremos mais a baixo).

Então, neste caso do “db.AddToTable“, percebe-se que basta adicionar um novo objeto normalmente:

 protected void btnCriarFruta_Click(object sender, EventArgs e)
        {
            using (var db = new banco1Entities())
            {
                db.AddToFRUTAS(new FRUTAS()
                {
                    Descricao = "Mamão, papaia ou ababaia é o fruto do mamoeiro ou papaeira.",
                    Nome = "Mamão"
                });
                db.SaveChanges();
            }
        }

Objeto inserido no contexto.

Agora precisamos apenas salvar a inserção feita, complementando nosso código com a seguinte instrução:

db.SaveChanges();

Nosso código ficando então finalmente da seguinte maneira:

 protected void btnCriarFruta_Click(object sender, EventArgs e)
 {
            using (var db = new banco1Entities())
            {
                db.AddToFRUTAS(new FRUTAS()
                {
                    Descricao = "Mamão, papaia ou ababaia é o fruto do mamoeiro ou papaeira.",
                    Nome = "Mamão"
                });
                db.SaveChanges();
            }
 }

Agora já temos a inclusão de um objeto no nosso contexto. Podemos então executar o projeto e testar a inclusão:

Passo 7:

O próximo passo, é fazermos o equivalente a

"SELECT * FROM FRUTAS"

Para isso, no método Page_Lod adicionaremos a seguinte instrução:

        protected void Page_Load(object sender, EventArgs e)
        {
            // Instancia contexto com o repositório
            using (var db = new banco1Entities())
            {
                // Seleciona todos os itens da tabela de frutas
                var lista = (from f in db.FRUTAS
                             select f).ToList(); // Transforma o resultado em uma lista

                GridView1.DataSource = lista; // Passa a lista para o DataSource do GridView
                GridView1.DataBind(); // Carrega os dados do DataSource no GridView
            }
        }

Agora basta testar a aplicação e ver funcionando. :)

Basicamente é isto.

Disponibilizei a solution completa no link abaixo para estudo:
http://www.mauricio-luis.com/blog/exemplos/linqtoentitiesbasico.rar

381 comentários em "Iniciando no Linq to Entities com MySQL"

Comentar aqui: