Linq to SQL – Atributos de Mapeamento Objeto-Relacional

Quando trabalhamos com LINQ to SQL nosso mapeamento objeto-relacional pode ser construído de duas maneiras: através de um arquivo externo (XML Mapping Source) ou através do mapeamento das classes da aplicação (Attribute Mapping Source). Na grande maioria dos casos acabamos por realizar o mapeamento dos atributos das classes da aplicação e utilizamos o Object Relational Designer – assistente do Microsoft Visual Studio que gera o mapeamento do banco de dados automaticamente para nossa aplicação.

O mapeamento ocorre da seguinte maneira:
– O banco de dados é mapeado para uma instância de um DataContext.
– Uma tabela é mapeada para uma classe
– As colunas da tabela são mapeadas para as propriedades das classes

Podemos construir esse mapeamento manualmente, sem utilizar o assistente do Microsoft Visual Studio, a fim de tornar o código mais simples, gerenciável e inteligível. Para tanto devemos fazer uso dos atributos de mapeamento do LINQ, tais atributos estão contidos no namespace System.Data.Linq.Mapping. Para ter acesso a esses atributos precisamos fazer referência a dll System.Data.Linq.

O mapeamento de uma tabela vai se parecer com o código a seguir:

Mapclasses

… baseado na estrutura da seguinte tabela:

clip_image003

Comparando o código C# e o código SQL, podemos considerar alguns pontos:
– O atributo Table, localizado acima da definição da classe Customer, indica que esta classe corresponde ao mapeamento de uma tabela, mais especificamente a tabela tbMappingCustomer, especificada pelo valor definido na propriedade Name .

– O atributo Column indica que uma propriedade corresponde a uma coluna da tabela, isto é, o atributo Column simboliza o mapeamento entre uma coluna da tabela e uma propriedade da classe.

– O atributo Column possui diversas propriedades Name e CanBeNull são apenas algumas, mas são algumas das principais. Em um próximo post discutiremos outras possibilidades. A propriedade Name do atributo Column indica qual coluna da tabela deverá ser mapeada pelo LINQ to SQL, e a propriedade CanBeNull indica quais colunas aceitam valores nulos na base de dados.

– As propriedades IsDbGenerated e IsPrimaryKey são propriedades do atributo Column, que são utilizadas apenas na propriedade ID, pois essa propriedade mapeia a chave primária da tabela. A propriedade IsDbGenerated indica que o atributo possui valores gerados pelo próprio banco de dados, no nosso caso os valores dessa coluna da tabela são gerados automaticamente pelo Identity(1, 1) citado no código SQL. A propriedade IsPrimaryKey é autoexplicativa, ela indica se a propriedade corresponde ao mapeamento da chave primaria da tabela.

Para persistir as informações é preciso utilizar um objeto que faça a ponte entre a aplicação e o banco de dados, este objetivo é o DataContext. A função do DataContext é traduzir o mapeamento objeto-relacional para comandos que possam ser interpretados pelo banco de dados, assim como converter os dados retornados pelo banco de dados para as entidades do mapeamento objeto-relacional.

No caso, costumo criar uma classe que herde de um DataContext, e que para cada tabela, crie-se um atributo do tipo Table<E> que referencie uma entidade mapeada para a aplicação. Na imagem abaixo demonstro como faço essa implementação.

DataContext

Abaixo um exemplo de como unir a utilização do DataContext customizado, com as entidades mapeadas manualmente.

Implementacao

Obrigado.
[]s!

Referências indicadas:
http://oreilly.com/catalog/9780596519254
http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx
http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/09/23/24907.aspx
http://msdn.microsoft.com/en-us/library/bb386971.aspx

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.