ASP .NET - Criando entidades LINQ to SQL no VB .NET (revisão)
Este tutorial irá mostrar como podemos ignorar o Designer do LINQ to SQL e escrever nós mesmos as classes que representam o nosso domínio, para dessa forma chegarmos a uma melhor compreensão do que está acontecendo 'por trás dos panos'. Então não vamos gerar o arquivo .dbml usando o assistente vamos seguir outro caminho.
Para este exemplo, iremos usar uma tabela do banco de dados SQL Server com três colunas : categoriaid, categorianome, categoriadescricao;
Para facilitar eu vou criar uma nova tabela chamada Categorias no banco de dados Northwind.mdf com a seguinte estrutura:
Assim vamos tratar com o banco de dados Northwind.mdf e a tabela Categorias que criamos.
Criando o Projeto no Visual Web Developer
Abra o Visual Web Developer 2010 Express e vamos criar um novo projeto do tipo ASP .NET WEB Application com o nome LINQtoSQL_Entidades;
A seguir vamos incluir duas referências no projeto para permitir o mapeamento com LINQ to SQL e poder acessar a string de conexão no arquivo web.config;
No menu Project clique em Add Reference e a seguir clique na guia .NET e selecione o componente
Repita o procedimento acima e inclua uma referência ao componente System.Configuration:
Agora vamos incluir uma classe no projeto onde iremos realizar o mapeamento OR/M a partir das tabelas do banco de dados gerando as respectivas classes via código:
A seguir vamos definir o seguinte código nesta classe:
Imports System Imports System.Linq Imports System.Data.Linq.Mapping <Table(name:="Categorias")> _ Public Class Categoria Private _Id As Integer Private _nome As String Private _descricao As String <Column(IsPrimaryKey:=True, IsDbGenerated:=True)> _ Public Property CategoriaId() As Integer Get Return _Id End Get Set(ByVal value As Integer) _Id = value End Set End Property <Column(CanBeNull:=True)> _ Public Property CategoriaNome() As String Get Return _nome End Get Set(ByVal value As String) _nome = value End Set End Property <Column(CanBeNull:=True)> _ Public Property CategoriaDescricao() As String Get Return _descricao End Get Set(ByVal value As String) _descricao = value End Set End Property End Class |
Nesta etapa vamos criar a
classe de entidade para a tabela Categoria que
deve representar a tabela Categorias em uma classe .NET; é desta forma que o LINQ To SQL efetua a modelagem com ajuda de certos atributos.
O atributo <Table>
possui a propriedade Name que podemos usar para
especificar o nome exato No nosso exemplo a classe Categoria
consiste de 3 propriedades publicas : categoriaid,categorianome O atributo <Table> na classe Categoria indica que a classe representa uma tabela de um SGBD. A propriedade Name do
atributo <Table> especifica o nome da tabela
no banco de dados. Se a classe e Somente as instâncias das
classes declaradas como tabelas serão armazenadas no
banco de dados. Para associar a classe com a
tabela precisamos definir cada campo ou propriedade que
desejamos associar A atributo <Column>
especifica que a propriedade relacionada é uma
coluna de uma tabela. Este atributo
No nosso exemplo categoriaid
é marcada com a propriedades IsPrimaryKey indicando
que representa |
Vamos agora definir a string de conexão usada para acessar o banco de dados Northwind.mdf no arquivo web.Config conforme abaixo:
<connectionStrings> <add name ="ConexaoNorthwind" connectionString ="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient" /> </connectionStrings> |
Agora vamos abrir a página Default.aspx e incluir nela os componentes:
<%@ Page Title="Home Page" Language="vb" MasterPageFile="~/Site.Master" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="LINQtoSQL_Entidades._Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <h2> <asp:GridView ID="gdvDados" runat="server" Height="265px" Width="622px"> </asp:GridView> <asp:Button ID="btnProcurar" runat="server" Text="Procurar" Width="172px" /> <asp:TextBox ID="txtNome" runat="server" BackColor="#FFFFE6" Width="457px"></asp:TextBox> </h2> </asp:Content> |
|
Finalmente vamos definir o código no arquivo code-behind Default.aspx.vb para tratar o evento Click do botão Procurar:
Imports System.Web.Configuration Imports System.Data.Linq Public Class _Default Inherits System.Web.UI.Page Protected Sub btnProcurar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnProcurar.Click Dim con As String = WebConfigurationManager.ConnectionStrings("ConexaoNorthwind").ConnectionString Dim db As New DataContext(con) Dim categoria = db.GetTable(Of Categoria)() gdvDados.DataSource = categoria.Where(Function(p) p.CategoriaNome.Contains(txtNome.Text)) gdvDados.DataBind() End Sub End Class |
Executando o projeto teremos a página Default.aspx exibida e, informando um valor para a busca, teremos o resultado exibido no controle GridView:
E assim vimos que podemos não depender do assistente gerando nós mesmos as classes que representam o nosso domínio. Isso pode ser de grande ajuda em certos projetos.
Pegue o projeto completo aqui : LINQtoSQL_Entidades.zip
1Pe 1:3
Bendito seja o Deus e Pai de nosso Senhor Jesus Cristo, que, segundo a sua grande misericórdia, nos regenerou para uma viva esperança, pela ressurreição de Jesus Cristo dentre os mortos,Referências: