Entity Framework 5 - Retornando objetos usando comandos SQL - II


Na primeira parte deste artigo vimos como executar comandos SQL contra uma fonte de dados em um projeto que usa o Entity Framework onde realizamos uma inclusão de no banco de dados.

Neste artigo veremos como podemos retornar objetos do nosso modelo usando comandos SQL.

Vamos usar o mesmo cenário montado para a primeira parte do artigo. Lembrando que estamos usando um banco de dados SQL Server chamado Cadastro.mdf e uma tabela Pagamentos conforme a estrutura abaixo:

Vamos usar o mesmo projeto criado no artigo anterior .

Abra o Visual Studio 2012 Express for desktop e abra o projeto EF_ExecutandoComandosSQL;

Vamos executar uma instrução SQL que retorna uma coleção de instâncias do tipo da entidade Pagamento.

Como vimos no artigo anterior o método ExecuteStoreCommand() é semelhante ao método ExecuteNonQuery e executa uma instrução SQL retornando o numero de linhas afetadas.

Para materializar os objetos a partir do nosso model podemos usar o comando ExecuteStoreQuery no contexto do objeto; assim vamos implementar a funcionalidade para executar uma instrução SQL e receber de volta uma coleção de instâncias do tipo da entidade Pagamento.

Vamos incluir no formulário form1.vb do projeto 2 novos botões de comando :

Defina no formulário form1.vb o seguinte leiaute usando os dois controles Buttons:

No evento Click do botão de comando - Adicionar Objetos - temos o código abaixo:

 Private Sub btnAdicionarObjetos_Click(sender As Object, e As EventArgs) Handles btnAdicionarObjetos.Click
        Using context = New CadastroEntities()
            context.Pagamentos.Add(New Pagamento() With {.valor = 125D, .vendedor = "Microsoft"})
            context.Pagamentos.Add(New Pagamento() With {.valor = 325D, .vendedor = "Apple"})
            context.Pagamentos.Add(New Pagamento() With {.valor = 500D, .vendedor = "Microsoft"})
            context.Pagamentos.Add(New Pagamento() With {.valor = 100D, .vendedor = "Motorola"})
            context.SaveChanges()
        End Using
    End Sub

Este código apenas cria uma instância do nosso contexto (CadastroEntities) e usando o método Add no DbSet inclui 4 novas entidades ao contexto. Dessa forma estamos incluindo as entidades com o estado Added significando que elas serão definitivamente inseridas no banco de dados quando o método SaveChanges() for chamado.

No evento Click do botão de comando - Retornar Objetos - inclua o código a seguir:

Private Sub btnRetornarObjetos_Click(sender As Object, e As EventArgs) Handles btnRetornarObjetos.Click
        Using context = New CadastroEntities()
            Dim sql As String = "select * from Pagamentos where vendedor = @Vendedor"

            Dim args = New DbParameter() {New SqlParameter() With {.ParameterName = "Vendedor", .Value = "Microsoft"}}
            Dim pagamentos = context.Database.SqlQuery(Of Pagamento)(sql, args)

            lsbResultado.Items.Add("Pagamentos incluídos...")
            For Each pag In pagamentos
                lsbResultado.Items.Add("Objetos retornados : " & pag.vendedor & " - " & pag.valor)
            Next
        End Using
    End Sub

O código cria uma instância do nosso contexto e define uma instrução sql para retornar os vendedores usando o parâmetro definido como @Vendedor.

A seguir definimos o nome do parâmetro e o valor do mesmo como argumentos que serão usados pelo SqlQuery.

O método é SqlQuery no DbSet permite realizar uma consulta SQL para retornar instâncias de uma entidade. Os objetos retornados serão rastreados pelo contexto como se eles fossem devolvidos por consulta LINQ.

Podemos usar o método SqlQuery sem parâmetros : Dim teste = context.Pagamentos.SqlQuery("Select * from Pagamentos").ToList()

No exemplo estamos definindo o parâmetro @Vendedor e incluindo o seu nome valor na coleção DbParameter().

A seguir executamos o comando e retornamos os objetos incluídos que atendem ao critério da consulta SQL executada obtemos o seguinte resultado:

Nota: Nas versões anteriores o método ExecuteStoreQuery() atuava de forma similar a este método.

Segue o projeto completo aqui: EF_ExecutandoComandosSQL_2.zip

Mat 6:31 Portanto, não vos inquieteis, dizendo: Que havemos de comer? ou: Que havemos de beber? ou: Com que nos havemos de vestir?

Mat 6:32 (Pois a todas estas coisas os gentios procuram.) Porque vosso Pai celestial sabe que precisais de tudo isso.

Mat 6:33 Mas buscai primeiro o seu reino e a sua justiça, e todas estas coisas vos serão acrescentadas.

Mat 6:34 Não vos inquieteis, pois, pelo dia de amanhã; porque o dia de amanhã cuidará de si mesmo. Basta a cada dia o seu mal.

Veja os Destaques e novidades do SUPER DVD Visual Basic 2013 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Referências:


José Carlos Macoratti