Passo a passo: modelo e consulta de objeto simples (C#)

Este passo a passo fornece um cenário LINQ to SQL de ponta a ponta fundamental com complexidades mínimas. Você criará uma classe de entidade que modela a tabela Customers no banco de dados de exemplo Northwind. Em seguida, criará uma consulta simples para listar os clientes que estão localizados em Londres.

Este passo a passo é orientado a código por design para ajudar a mostrar os conceitos do LINQ to SQL. Normalmente, é utilizado o Object Relational Designer para criar o modelo de objeto.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizando o IDE.

Esse passo a passo foi escrito usando as configurações de desenvolvimento do Visual C#.

Pré-requisitos

  • Este passo a passo usa uma pasta dedicada ("c:\linqtest5") para armazenar arquivos. Crie essa pasta antes de iniciar o passo a passo.

  • Este passo a passo requer o banco de dados de exemplo Northwind. Se você não tiver esse banco de dados no seu computador de desenvolvimento, poderá baixá-lo no site de download da Microsoft. Para obter as instruções, confira Baixar bancos de dados de exemplo. Depois de baixar o banco de dados, copie o arquivo para a pasta c:\linqtest5.

Visão geral

Este passo a passo consiste em seis tarefas principais:

  • Criar uma solução do LINQ to SQL no Visual Studio.

  • Mapear uma classe para uma tabela do banco de dados.

  • Designar propriedades na classe para representar colunas do banco de dados.

  • Especificar a conexão ao banco de dados Northwind.

  • Criar uma consulta simples para execução no banco de dados.

  • Executar a consulta e observar os resultados.

Criando uma solução LINQ to SQL

Nesta primeira tarefa, você criará uma solução do Visual Studio com as referências necessárias para compilar e executar um projeto do LINQ to SQL.

Para criar uma solução LINQ to SQL

  1. No Visual Studio, no menu Arquivo, aponte para Novo e, em seguida, clique em Projeto.

  2. No painel Tipos de projeto da caixa de diálogo Novo Projeto, clique em Visual C#.

  3. No painel Modelos, clique em Aplicativo de Console.

  4. Na caixa Nome, digite LinqConsoleApp.

  5. Na caixa Localização, verifique onde você quer armazenar os arquivos de projeto.

  6. Clique em OK.

Adicionando referências e diretivas LINQ

Este passo a passo usa assemblies que não podem ser instalados por padrão em seu projeto. Se o System.Data.Linq não estiver listado como uma referência em seu projeto (expanda o nó Referências no Gerenciador de Soluções), adicione-o conforme explicado nas etapas a seguir.

Para adicionar System.Data.Linq

  1. No Gerenciador de Soluções, clique com o botão direito do mouse em Referências e clique em Adicionar Referência.

  2. Na caixa de diálogo Adicionar Referência, clique em .NET, clique no assembly System.Data.Linq e, em seguida, clique em OK.

    O assembly é adicionado ao projeto.

  3. Adicione as seguintes diretivas na parte superior de Program.cs:

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

Mapeando uma classe para uma tabela do banco de dados

Nesta etapa, você cria uma classe e a mapeia para uma tabela do banco de dados. Essa classe é denominada uma classe de entidade. Observe que o mapeamento é realizado simplesmente adicionando o atributo TableAttribute. A propriedade Name especifica o nome da tabela no banco de dados.

Para criar uma classe de entidade e mapeá-la para uma tabela do banco de dados.

  • Digite ou cole o código a seguir em Program.cs imediatamente acima da declaração de classe Program:

    [Table(Name = "Customers")]
    public class Customer
    {
    }
    

Designando propriedades na classe para representar colunas do banco de dados

Nesta etapa, você realiza várias tarefas.

  • Você usa o atributo ColumnAttribute para designar as propriedades CustomerID e City na classe de entidade como representação de colunas na tabela do banco de dados.

  • Você designa a propriedade CustomerID como a representação de uma coluna de chave primária no banco de dados.

  • Você designa os campos _CustomerID e _City para armazenamento particular. O LINQ to SQL pode armazenar e recuperar valores diretamente, em vez de usar acessadores públicos que podem incluir lógica de negócios.

Para representar características de duas colunas do banco de dados

  • Digite ou cole o código a seguir em Program.cs dentro das chaves para a classe Customer.

    private string _CustomerID;
    [Column(IsPrimaryKey=true, Storage="_CustomerID")]
    public string CustomerID
    {
        get
        {
            return this._CustomerID;
        }
        set
        {
            this._CustomerID = value;
        }
    }
    
    private string _City;
    [Column(Storage="_City")]
    public string City
    {
        get
        {
            return this._City;
        }
        set
        {
            this._City=value;
        }
    }
    

Especificando a conexão ao banco de dados Northwind

Nesta etapa você usa um objeto DataContext para estabelecer uma conexão entre as estruturas de dados baseadas em código e o próprio banco de dados. O DataContext é o canal principal por meio do qual você recupera objetos do banco de dados e envia alterações.

Você também declara um Table<Customer> para atuar como a tabela lógica tipada para suas consultas na tabela Customers do banco de dados. Você criará e executará essas consultas em etapas posteriores.

Para especificar a conexão do banco de dados

  • Digite ou cole o código a seguir no método Main:

    Observe que supõe-se que o arquivo northwnd.mdf está na pasta linqtest5. Para obter mais informações, consulte a seção de pré-requisitos anteriormente neste passo a passo.

    // Use a connection string.
    DataContext db = new DataContext
        (@"c:\linqtest5\northwnd.mdf");
    
    // Get a typed table to run queries.
    Table<Customer> Customers = db.GetTable<Customer>();
    

Criando uma consulta simples

Nesta etapa, você cria uma consulta para localizar quais clientes da tabela Customers do banco de dados estão localizados em Londres. O código da consulta nesta etapa apenas descreve a consulta. Não a executa. Essa abordagem é conhecida como execução adiada. Para obter mais informações, consulte Introdução a Consultas de LINQ (C#).

Você também produzirá uma saída de log para mostrar os comandos SQL gerados pelo LINQ to SQL. Este recurso de log (que usa Log) é útil para depuração e para determinar se os comandos que estão sendo enviados ao banco de dados representam precisamente sua consulta.

Para criar uma consulta simples

  • Digite ou cole o código a seguir no método Main depois da declaração Table<Customer>.

    // Attach the log to show generated SQL.
    db.Log = Console.Out;
    
    // Query for customers in London.
    IQueryable<Customer> custQuery =
        from cust in Customers
        where cust.City == "London"
        select cust;
    

Executando a consulta

Nesta etapa, você realmente executa a consulta. As expressões de consulta que você criou nas etapas anteriores não são avaliadas até que os resultados sejam necessários. Quando você começa a iteração foreach, um comando SQL é executado no banco de dados e os objetos são materializados.

Para executar a consulta.

  1. Digite ou cole o seguinte código ao final do método Main (após a descrição de consulta).

    foreach (Customer cust in custQuery)
    {
        Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
            cust.City);
    }
    
    // Prevent console window from closing.
    Console.ReadLine();
    
  2. Pressione F5 para depurar o aplicativo.

    Observação

    Se o aplicativo gerar um erro em tempo de execução, confira a seção Solução de problemas de Aprendizado por passo a passo.

    Os resultados da consulta na janela do console devem aparecer da seguinte maneira:

    ID=AROUT, City=London

    ID=BSBEV, City=London

    ID=CONSH, City=London

    ID=EASTC, City=London

    ID=NORTS, City=London

    ID=SEVES, City=London

  3. Pressione Enter na janela Console para fechar o aplicativo.

Próximas etapas

O tópico Explicações passo a passo: consulta entre relações (C#) continua do ponto em que estas explicações passo a passo terminam. As explicações passo a passo Consultar entre relações demonstra como o LINQ to SQL pode consultar entre tabelas, semelhante a junções em um banco de dados relacional.

Se você desejar realizar o passo a passo Consulta entre relações, salve a solução do passo a passo que você acabou de concluir, que é um pré-requisito.

Confira também