WPF - Acessando dados no SQL Server com Entity Framework


Hoje vou mostrar como criar uma aplicação WPF - Windows Presentation Foundation - acessando dados do SQL Server usando os recursos do Entity Framework.

Vamos criar uma aplicação para cadastrar itens e links relacionados onde no nosso domínio iremos ter uma tabela para categorias e outra para itens no SQL Server.

Para abstrair o acesso aos dados vamos usar o Entity Framework e gerar o mapeamento objeto relacional entre as tabelas e os objetos do nosso domínio.

Aplicando as boas práticas vamos criar uma classe que atuará como a nossa camada de acesso a dados usando o contexto gerado pelo mapeamento OR/M.

Criando o projeto e definindo o modelo de dados

Vamos iniciar definindo o banco de dados e as tabelas usadas pela nossa aplicação no SQL Server. Podemos fazer isso de diversas formas mas eu vou criar o banco de dados e as tabelas no próprio ambiente do Visual Basic 2010 Express que será usado para criar a nossa aplicação WPF.

Abra o Visual Basic 2010 Express e crie um novo projeto (File-> New Project) do tipo WPF Application com o nome Wpf_Links;

Agora abra a janela Database Explorer e clique com o botão direito do mouse sobre o item Data Connections;

Na janela Add Connection vamos selecionar o Data source Microsoft SQL Server Database File e o nome Hiperlinks;

Assim estaremos criando o banco de dados Hiperlinks, para isso clique no botão Sim na janela que informe que o arquivo não existe e pergunta se você deseja criá-lo;

Será exibido o banco de dados Hiperlinks na janela Database Explorer;

Vamos criar as tabelas clicando com o botão direito do mouse sobre o item Tables e a seguir em Add New Table;

Vamos iniciar com a tabela Categorias definindo a sua estrutura conforme abaixo:

A seguir vamos criar a tabela Itens com a seguinte estrutura:

Vamos definir o relacionamento entre as duas tabelas conforme mostra a figura abaixo onde temos um relacionamento entre o campo categoriaid da tabela Categorias e o campo categoriaid da tabela Itens:

Definindo o relacionamento OR/M com o Entity Framework

Vamos definir agora o mapeamento OR/M usando o Entity Framework seleciona do o menu Project e clicando em Add New Item e a seguir escolhendo o template Entity Data Model;

Será gerado o mapeamento OR/M e as entidades Categoria e Item que representam as tabelas Categorias e Itens;

Temos também a criação do contexto HiperliknkEntities que representa o nosso modelo de domínio de entidades que iremos usar para acessar as entidades do nosso domínio;

Criando a classe de acesso a dados

Vamos definir a nossa camada de acesso a dados criando uma classe no projeto com o nome DALHiperlink.vb e definindo nesta classe alguns métodos para acessar e persistir informações das entidades;

No menu Project clique em Add Class e informe o nome DALHiperlink.vb e a seguir defina o código abaixo nesta classe:

Imports System.Linq
Imports System.Collections

Public Class DALHiperlink

    Public Shared Function getDados(ByVal topico As String) As IEnumerable
        Dim contexto As New HiperlinksEntities()
        Dim resultado = From itm In contexto.Itens
                                Join cat In contexto.Categorias
                                On itm.categoriaid Equals cat.categoriaid
                                Where (itm.topico.StartsWith(topico))
                                Select itm
        Return resultado

    End Function

    Public Shared Function getCategoria() As IList
        Dim contexto As New HiperlinksEntities()
        Return contexto.Categorias.[Select](Function(x) x.descricao).ToList()
    End Function

    Public Shared Function getTopicos(ByVal descricao As String) As IList
        Dim context As New HiperlinksEntities()
        Dim resultado = (From itm In context.Itens
                                Join cat In context.Categorias
                                On itm.categoriaid Equals cat.categoriaid
                                Where cat.descricao = descricao
                                Select itm.topico).ToList()
        Return resultado
    End Function

    Public Shared Sub incluirDados(ByVal topico As String, ByVal endereco As String, ByVal Maincategory As String)
        Dim contexto As New HiperlinksEntities()
        Dim nEntidade = New Item()
        nEntidade.topico = topico
        nEntidade.link = endereco
        nEntidade.categoriaid = contexto.Categorias.Where(Function(x) x.descricao = Maincategory).[Select](Function(x) x.categoriaid).First()
        contexto.AddObject("Itens", nEntidade)
        contexto.SaveChanges()
    End Sub

    Public Shared Sub incluirCategoria(ByVal descricao As String)
        Dim context As New HiperlinksEntities()
        Dim nEntidade = New Categoria()
        nEntidade.descricao = descricao
        context.AddObject("Categorias", nEntidade)
        context.SaveChanges()
    End Sub

End Class

Nesta classe temos os seguintes métodos estáticos(Shared):

Estamos usando o LINQ to Entities para consultar as entidades; o método AddObject e o método SaveChanges para incluir e persistir as informações das entidades.

Na próxima parte do artigo vamos definir a interface com o usuário e usar a classe de acesso a dados para gerenciar as informações das nossas entidades.

Aguarde: WPF - Acessando dados no SQL Server com Entity Framework - II

Heb 3:17 E contra quem se indignou por quarenta anos? Não foi porventura contra os que pecaram, cujos corpos caíram no deserto?

Heb 3:18 E a quem jurou que não entrariam no seu descanso, senão aos que foram desobedientes?

Heb 3:19 E vemos que não puderam entrar por causa da incredulidade.

Referências:


José Carlos Macoratti