Ir para o conteúdo

Como utilizar comandos SQL através de ADO.NET Entity Framework

Este artigo irá mostrar as principais diferenças entre a sintaxe normal e a sintaxe ESQL.

Recursos utilizados:

  • .Net Framework 4.0
  • Um modelo Entity Framework

Utilização

Os seguintes exemplos foram utilizados com um model chamado ArtigosWikiEntities e a classe utilizada é Artigos.

A estrutura e dados da tabela é a seguinte:

ID(Int) Descr(Varchar(50))
1 Disco externo 120GB
2 Memoria RAM DDR2
3 Memoria RAM DDR3

Antes de mais, devem ser importados os namespaces para facilitar a programação.

Imports System.Data.EntityClient
Imports System.Data.Common

Seleccionar todos os campos de uma tabela

Dim Cm As New EntityCommand
Cm.CommandText = "SELECT VALUE Artigos FROM ArtigosWikiEntities.Artigos AS Artigos" 'Em vez de "*" é utilizada a função "VALUE" seguida do nome da tabela, que neste caso é Artigos
Using Cn As New EntityConnection("name=ArtigosWikiEntities") 'Nome da connectionstring guardada no App.config
    Cm.Connection = Cn
    Cn.Open()
    Using Dr As DbDataReader = Cm.ExecuteReader(CommandBehavior.SequentialAccess) 'Como não existe um "EntitiDataReader", é necessário utilizar o "DbDataReader", localizado em "System.Data.Common"
        While Dr.Read
            Console.WriteLine(Dr(0) & " " & Dr(1))
        End While
    End Using
End Using

Output

1 Disco externo 120GB
2 Memoria RAM DDR2
3 Memoria RAM DDR3

Seleccionar alguns campos de uma tabela

Dim Cm As New EntityCommand
Cm.CommandText = "SELECT Artigos.Descr FROM ArtigosWikiEntities.Artigos AS Artigos" 'Deve ser sempre indicado o nome da tabela antes do campo
Using Cn As New EntityConnection("name=ArtigosWikiEntities")
    Cm.Connection = Cn
    Cn.Open()
    Using Dr As DbDataReader = Cm.ExecuteReader(CommandBehavior.SequentialAccess)
        While Dr.Read
            Console.WriteLine(Dr(0))
        End While
    End Using
End Using

Output

Disco externo 120GB
Memoria RAM DDR2
Memoria RAM DDR3

Criar uma Query parametrizada

Dim Cm As New EntityCommand
Cm.CommandText = "SELECT VALUE Artigos FROM ArtigosWikiEntities.Artigos AS Artigos WHERE Artigos.ID = @ID"
Cm.Parameters.Add("ID", DbType.Int32).Value = 1 'Ao contario do SQL, Access, etc., ao adicionar o parametro o "@" não deve ser indicado
Using Cn As New EntityConnection("name=ArtigosWikiEntities")
    Cm.Connection = Cn
    Cn.Open()
    Using Dr As DbDataReader = Cm.ExecuteReader(CommandBehavior.SequentialAccess)
        While Dr.Read
            Console.WriteLine(Dr(0))
        End While
    End Using
End Using

Output

1 Disco externo 120GB

Resumo

Como podemos verificar, para além de LINQ to Entities, também é possível utilizar sintaxe SQL com Entity Framework.