Ferramentas do LINQ to SQL no Visual Studio

O LINQ to SQL foi a primeira tecnologia de mapeamento relacional de objetos lançada pela Microsoft. Ele funciona bem em cenários básicos e continua com suporte no Visual Studio, mas não está mais em desenvolvimento ativo. Use o LINQ to SQL para manter um aplicativo herdado que já o esteja usando ou em aplicativos simples que usam SQL Server e não exigem mapeamento de várias tabelas. De modo geral, novos aplicativos devem usar o Entity Framework quando uma camada de mapeador relacional de objeto é necessária.

Instalar as ferramentas do LINQ to SQL

No Visual Studio, você cria classes do LINQ to SQL que representam tabelas SQL usando o Designer Relacional de Objetos (Object Relational Designer). O designer relacional de objetos é a interface do usuário para edição de arquivos .dbml. A edição de arquivos .dbml com uma superfície de designer requer as ferramentas de LINQ to SQL que não são instaladas por padrão como parte de uma das cargas de trabalho do Visual Studio.

Para instalar as ferramentas do LINQ to SQL, inicie o instalador do Visual Studio, escolha Modificar, selecione a guia Componentes Individuais e, em seguida, Ferramentas do LINQ to SQL na categoria Ferramentas de Código.

O que é o Designer Relacional de Objetos

O Designer Relacional de Objetos tem duas áreas distintas na superfície de design: o painel de entidades à esquerda e o painel de métodos à direita. O painel das entidades é a principal superfície de design que exibe as classes de entidade, as associações, e hierarquias de herança. O painel de métodos é a superfície de design que exibe os métodos do DataContext que são mapeados para os procedimentos armazenados e as funções.

O Designer Relacional de Objetos fornece uma superfície de design visual para criar associações (relações) e classes de entidade do LINQ to SQL baseadas em objetos em um banco de dados. Ou seja, o Designer Relacional de Objetos cria um modelo de objeto em um aplicativo que mapeia para objetos em um banco de dados. Ele também gera um DataContext fortemente tipado que envia e recebe dados entre as classes de entidade e o banco de dados. O Designer Relacional de Objetos também fornece funcionalidade para mapear procedimentos armazenados e funções para métodos DataContext para retornar dados e preencher classes de entidade. Por fim, o Designer Relacional de Objetos permite criar relações de herança entre classes de entidade.

Abrir o designer relacional de objetos

Para adicionar um modelo de entidade do LINQ to SQL ao projeto, escolha Projeto>Adicionar Novo Item e selecione Classes do LINQ to SQL na lista de itens de projeto:

Classes do LINQ to SQL

O Visual Studio cria um arquivo .dbml e o adiciona à sua solução. Este é o arquivo de mapeamento XML e os arquivos de código relacionados.

Classes do LINQ to SQL no Gerenciador de Soluções

Quando você seleciona o arquivo .dbml, o Visual Studio mostra a superfície do Designer Relacional de Objetos que permite criar visualmente o modelo. A ilustração a seguir mostra o designer depois que as tabelas Customers e Orders da Northwind foram arrastadas do Gerenciador de Servidores. Observe a relação entre as tabelas.

Designer do LINQ to SQL

Importante

O Designer Relacional de Objetos é um mapeador de objetos relacional simples porque dá suporte apenas a relações de mapeamento de 1:1. Em outras palavras, uma classe de entidade pode ter apenas uma relação de mapeamento de 1:1 com uma tabela ou exibição de banco de dados. Não há suporte para mapeamento complexo, como o mapeamento de uma classe de entidade para uma tabela unida. Use o Entity Framework para mapeamento complexo. Além disso, o designer é um gerador de código unidirecional. Isso significa que somente as alterações feitas à superfície de designer são refletidas no arquivo de código. Alterações manuais no arquivo de código não são refletidas no Designer Relacional de Objetos. Alterações feitas manualmente no arquivo de código são substituídas quando o designer é salvo e o código é regenerado. Para obter informações sobre como adicionar código de usuário e estender as classes geradas pela Relational Designer, consulte como: Estender o código gerado pelo Designer Relacional de Objetos.

Criar e configurar o DataContext

Após você adicionar um item de Classes do LINQ to SQL a um projeto e abrir o Designer Relacional de Objetos, a superfície de design vazia representa um DataContext vazio pronto para ser configurado. O DataContext é configurado com as informações de conexão fornecidas pelo primeiro item que é arrastado para a superfície de design. Portanto, o DataContext é configurado usando as informações de conexão do primeiro item solto na superfície de design. Para obter mais informações sobre a classe DataContext, confira Métodos DataContext (Designer Relacional de Objetos).

Criar classes de entidade que mapeiam para tabelas de banco de dados e exibições

Você pode criar classes de entidade mapeadas para tabelas e exibições arrastando tabelas de banco de dados e exibições do Gerenciador de Servidores ou do Gerenciador de Banco de Dados para o Designer Relacional de Objetos. Conforme indicado na seção anterior, o DataContext é configurado com as informações de conexão fornecidas pelo primeiro item que é arrastado para a superfície de design. Se um item posterior que usa uma conexão diferente for adicionado ao Designer Relacional de Objetos, você poderá alterar a conexão do DataContext. Para saber mais, confira Como criar classes do LINQ to SQL mapeadas para tabelas e exibições (Designer Relacional de Objetos).

Criar métodos DataContext que chamam funções e procedimentos armazenados

Você pode criar métodos DataContext que chamam (são mapeados para) funções e procedimentos armazenados arrastando-os do Gerenciador de Servidores ou do Gerenciador de Banco de Dados para o Designer Relacional de Objetos. Os procedimentos armazenados e funções são adicionados ao Designer Relacional de Objetos como métodos do DataContext.

Observação

Quando você arrasta procedimentos armazenados e funções do Gerenciador de Servidores ou do Gerenciador de Banco de Dados para o Designer Relacional de Objetos, o tipo de retorno do método DataContext gerado difere dependendo de onde você solta o item. Para saber mais, confira Métodos DataContext (Designer Relacional de Objetos).

Configurar um DataContext para usar procedimentos armazenados para salvar dados entre classes de entidade e um banco de dados

Conforme observado anteriormente, você pode criar os métodos de DataContext que chamam procedimentos armazenados e funções. Além disso, você também pode atribuir procedimentos armazenados que são usados para o comportamento padrão de tempo de execução do LINQ to SQL, que executa inserções, atualizações e exclusões. Para obter mais informações, confira Como atribuir procedimentos armazenados para executar atualizações, inserções e exclusões (Designer Relacional de Objetos).

Herança e Designer Relacional de Objetos

Assim como outros objetos, as classes do LINQ to SQL podem usar a herança e ser derivadas de outras classes. Em uma base de dados, as relações de herança são criadas de várias maneiras. O Designer Relacional de Objetos dá suporte ao conceito de herança de tabela única, pois geralmente é implementado em sistemas relacionais. Para saber mais, confira Como configurar a herança usando o Designer Relacional de Objetos.

Consultas do LINQ to SQL

As classes de entidade criadas pelo Designer Relacional de Objetos foram projetadas para uso com LINQ (consulta integrada à linguagem). Para obter mais informações, consulte Como consultar informações.

Separar o DataContext e o código de classe de entidade gerados em diferentes namespaces

O Designer Relacional de Objetos fornece as propriedades de Namespace do Contexto e Namespace da Entidade no DataContext. Essas propriedades que determinam o namespace DataContext e o código de classe de entidade são gerados. Por padrão, essas propriedades são vazios e DataContext e classes de entidade são gerados no namespace do aplicativo. Para gerar código em um namespace diferente do namespace do aplicativo, insira um valor nas propriedades do Namespace do Contexto e/ou do Namespace da Entidade.

Conteúdo de referência

Confira também