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: