Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este passo a passo fornece um cenário básico de LINQ to SQL de ponta a ponta com complexidades mínimas. Você criará uma classe de entidade que modela a tabela Customers no banco de dados Northwind de exemplo. Em seguida, você criará uma consulta simples para listar os clientes que estão localizados em Londres.
Este passo a passo é intencionalmente focado em código para ajudar a mostrar os conceitos do LINQ to SQL. Normalmente falando, você usaria o Designer Relacional de Objeto para criar seu modelo de objeto.
Observação
Seu computador pode mostrar nomes ou locais diferentes 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ê tem e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizando o IDE.
Este 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 esta pasta antes de começar 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 em seu computador de desenvolvimento, poderá baixá-lo no site de download da Microsoft. Para obter instruções, consulte 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:
Criando uma solução LINQ to SQL no Visual Studio.
Mapeando uma classe para uma tabela de banco de dados.
Designando propriedades na classe para representar colunas de banco de dados.
Especificando a conexão com o banco de dados Northwind.
Criando uma consulta simples para ser executada no banco de dados.
Executando a consulta e observando os resultados.
Criando uma solução LINQ to SQL
Nesta primeira tarefa, você cria uma solução do Visual Studio que contém as referências necessárias para criar e executar um projeto LINQ to SQL.
Para criar uma solução LINQ to SQL
No menu Arquivo do Visual Studio, aponte para Novo e clique em Projeto.
No painel Tipos de projeto da caixa de diálogo Novo Projeto , clique em Visual C#.
No painel Modelos , clique em Aplicativo de Console.
Na caixa Nome , digite LinqConsoleApp.
Na caixa Localização , verifique onde você deseja armazenar os arquivos do projeto.
Clique em OK.
Adicionando referências e diretivas LINQ
Este passo a passo usa conjuntos que podem não ser instalados por padrão em seu projeto. Se 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
No Gerenciador de Soluções, clique com o botão direito do mouse em Referências e clique em Adicionar Referência.
Na caixa de diálogo Adicionar Referência , clique em .NET, clique no assembly System.Data.Linq e clique em OK.
O assembly é adicionado ao projeto.
Adicione as seguintes diretivas na parte superior do Program.cs:
using System.Data.Linq; using System.Data.Linq.Mapping;
Mapeando uma classe para uma tabela de banco de dados
Nesta etapa, você criará uma classe e a mapeará para uma tabela de banco de dados. Essa classe é chamada de classe de entidade. Observe que o mapeamento é realizado apenas adicionando o TableAttribute atributo. A Name propriedade especifica o nome da tabela no banco de dados.
Para criar uma classe de entidade e mapeá-la para uma tabela de banco de dados
Digite ou cole o seguinte código em Program.cs imediatamente acima da declaração de
Programclasse:[Table(Name = "Customers")] public class Customer { }
Designando propriedades na classe para representar colunas de banco de dados
Nesta etapa, você realizará várias tarefas.
Você usa o ColumnAttribute atributo para designar
CustomerIDeCitypropriedades na classe de entidade como representando colunas na tabela de banco de dados.Você designa a
CustomerIDpropriedade como representando uma coluna de chave primária no banco de dados.Você designa
_CustomerIDe_Citycampos para armazenamento privado. 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 de 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 com o Banco de Dados Northwind
Nesta etapa, você usa um DataContext objeto para estabelecer uma conexão entre suas estruturas de dados baseadas em código e o próprio banco de dados. O DataContext canal principal é o 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 de banco de dados
Digite ou cole o código a seguir no
Mainmétodo.Observe que o
northwnd.mdfarquivo deve estar na pasta linqtest5. Para obter mais informações, consulte a seção 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ê criará uma consulta para localizar quais clientes na tabela Clientes do banco de dados estão localizados em Londres. O código de consulta nesta etapa descreve apenas a consulta. Não a executa. Essa abordagem é conhecida como execução adiada. Para obter mais informações, consulte Introdução às consultas LINQ (C#).
Você também produzirá uma saída de log para mostrar os comandos SQL gerados pelo LINQ to SQL. Esse recurso de registro em log (que usa Log) é útil na depuração e na determinação de que os comandos enviados para o banco de dados representam com precisão sua consulta.
Para criar uma consulta simples
Digite ou cole o código a seguir no
Mainmétodo após aTable<Customer>declaração.// 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 criadas nas etapas anteriores não são avaliadas até que os resultados sejam necessários. Quando você inicia a foreach iteração, um comando SQL é executado no banco de dados e os objetos são materializados.
Para executar a consulta
Digite ou cole o código a seguir no final do método (após a descrição
Mainda consulta).foreach (Customer cust in custQuery) { Console.WriteLine("ID={0}, City={1}", cust.CustomerID, cust.City); } // Prevent console window from closing. Console.ReadLine();Pressione F5 para depurar o aplicativo.
Observação
Se o aplicativo gerar um erro de runtime, consulte a seção Solução de problemas do Learning by Walkthroughs.
Os resultados da consulta na janela do console devem aparecer da seguinte maneira:
ID=AROUT, City=LondonID=BSBEV, City=LondonID=CONSH, City=LondonID=EASTC, City=LondonID=NORTS, City=LondonID=SEVES, City=LondonPressione Enter na janela do 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. O tutorial Consulta entre Relações demonstra como o LINQ to SQL pode realizar consultas entre tabelas, de forma 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.