Compartilhar via


LINQ e ADO.NET

Hoje, muitos desenvolvedores de negócios devem usar duas (ou mais) linguagens de programação: uma linguagem de alto nível para a lógica de negócios e camadas de apresentação (como Visual C# ou Visual Basic) e uma linguagem de consulta para interagir com o banco de dados (como Transact-SQL). Isso exige que o desenvolvedor seja proficiente em vários idiomas para ser eficaz e também causa incompatibilidades de linguagem no ambiente de desenvolvimento. Por exemplo, uma aplicação que usa uma API de acesso a dados para executar uma consulta em um banco de dados define a consulta como um literal de string usando aspas. Essa cadeia de caracteres de consulta é ilegível para o compilador e não é verificada quanto a erros, como sintaxe inválida ou se as colunas ou linhas que ele faz referência realmente existem. Não há nenhuma verificação do tipo dos parâmetros da consulta e também nenhum suporte do IntelliSense.

A consulta integrada à linguagem (LINQ) permite que os desenvolvedores formem consultas baseadas em conjuntos no código de seus aplicativos, sem precisar usar uma linguagem de consulta separada. Você pode escrever consultas LINQ em várias fontes de dados enumeráveis (ou seja, uma fonte de dados que implementa a IEnumerable interface), como estruturas de dados na memória, documentos XML, bancos de dados SQL e DataSet objetos. Embora essas fontes de dados enumeráveis sejam implementadas de várias maneiras, todas elas expõem a mesma sintaxe e construções de linguagem. Como as consultas podem ser formadas na própria linguagem de programação, você não precisa usar outra linguagem de consulta inserida como literais de cadeia de caracteres que não podem ser compreendidas ou verificadas pelo compilador. A integração de consultas na linguagem de programação também permite que os programadores do Visual Studio sejam mais produtivos fornecendo verificação de tempo de compilação e da sintaxe e o IntelliSense. Esses recursos reduzem a necessidade de depuração da consulta e de correção de erros.

A transferência de dados de tabelas SQL para objetos na memória geralmente é entediante e propensa a erros. O provedor LINQ implementado pelo LINQ para DataSet e LINQ para SQL converte os dados de origem em coleções baseadas em objetos IEnumerable. O programador sempre exibe os dados como uma coleção IEnumerable , tanto quando você consulta e quando atualiza. Suporte completo do IntelliSense é fornecido para escrever consultas nessas coleções.

Existem três tecnologias de consulta ADO.NET Language-Integrated distintas: LINQ to DataSet, LINQ to SQL e LINQ to Entities. O LINQ to DataSet fornece consultas mais avançadas e otimizadas sobre o DataSet e LINQ to SQL permite que você consulte diretamente os esquemas de banco de dados do SQL Server, e o LINQ to Entities permite que você consulte um modelo de dados de entidade.

O diagrama a seguir fornece uma visão geral de como as tecnologias LINQ ADO.NET se relacionam com linguagens de programação de alto nível e fontes de dados habilitadas para LINQ.

Visão geral do LINQ to ADO.NET

Para obter mais informações sobre LINQ, consulte LINQ (Consulta Integrada à Linguagem).

As seções a seguir fornecem mais informações sobre LINQ to DataSet, LINQ to SQL e LINQ to Entities.

LINQ to DataSet

O DataSet é um elemento-chave do modelo de programação desconectado no qual ADO.NET é criado e é amplamente usado. O LINQ to DataSet permite que os desenvolvedores criem recursos de consulta mais avançados DataSet usando o mesmo mecanismo de formulação de consulta disponível para muitas outras fontes de dados. Para obter mais informações, consulte LINQ to DataSet.

LINQ to SQL

O LINQ to SQL é uma ferramenta útil para desenvolvedores que não exigem mapeamento para um modelo conceitual. Usando LINQ to SQL, você pode usar o modelo de programação LINQ diretamente sobre o esquema de banco de dados existente. O LINQ to SQL permite que os desenvolvedores gerem classes do .NET Framework que representam dados. Em vez de mapear para um modelo de dados conceitual, essas classes geradas são mapeadas diretamente para tabelas de banco de dados, exibições, procedimentos armazenados e funções definidas pelo usuário.

Com o LINQ to SQL, os desenvolvedores podem escrever código diretamente no esquema de armazenamento usando o mesmo padrão de programação do LINQ como coleções na memória e o DataSet, além de outras fontes de dados, como XML. Para obter mais informações, consulte LINQ to SQL.

LINQ to Entities

A maioria dos aplicativos está atualmente escrita em cima de bancos de dados relacionais. Em algum momento, esses aplicativos precisarão interagir com os dados representados em uma forma relacional. Esquemas de banco de dados nem sempre são ideais para a criação de aplicativos e os modelos conceituais de aplicativo não são os mesmos que os modelos lógicos de bancos de dados. O Modelo de Dados de Entidade é um modelo de dados conceitual que pode ser usado para modelar os dados de um domínio específico para que os aplicativos possam interagir com dados como objetos. Para obter mais informações, consulte ADO.NET Entity Framework.

Por meio do Modelo de Dados de Entidade, os dados relacionais são expostos como objetos no ambiente do .NET. Isso torna a camada de objetos um destino ideal para o suporte LINQ, permitindo que os desenvolvedores criem consultas no banco de dados usando a mesma linguagem utilizada para elaborar a lógica de negócios. Essa funcionalidade é conhecida como LINQ to Entities. Para obter mais informações, consulte LINQ to Entities.

Consulte também