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.