Passo a passo: criando classes LINQ to SQL (Designer Relacional de Objetos)

O Designer Relacional de Objetos fornece uma superfície de design visual para criar e editar as classes LINQ to SQL (classes de entidade) que são baseadas em objetos em um banco de dados. Usando LINQ to SQL [wd_LINQSQL], você pode acessar bancos de dados SQL com a tecnologia LINQ. Para obter mais informações, consulte LINQ (Consulta Integrada à Linguagem).

Essa explicação passo a passo fornece as etapas que você deve seguir para criar classes de entidade LINQ to SQL mapeadas para as tabelas de clientes e pedidos no banco de dados Northwind e exibir os dados no Windows Form. Além das etapas para exibir os dados da tabela, as etapas para associar dados a uma consulta do LINQ também são fornecidas. Finalmente, as etapas para usar procedimentos armazenados para substituir a lógica padrão do LINQ to SQL para enviar atualizações das classes de entidade para o banco de dados são fornecidas.

Durante essa explicação passo a passo, será ensinado como realizar as seguintes tarefas:

  • Adicionar um arquivo do LINQ to SQL a um projeto.

  • Criar novas classes de entidade que são mapeadas para tabelas relacionadas no banco de dados.

  • Criar uma fonte de dados de objeto que referencia as classes de entidade.

  • Criar um Windows Form que contém controles que estão associados às classes de entidade.

  • Adicionar código para carregar e salvar os dados entre as classes de entidade e o banco de dados.

  • Construir uma consulta simples do LINQ e exibir os resultados no formulário.

  • Adicionar procedimentos armazenados ao Designer Relacional de Objetos.

  • Configure uma classe de entidade para usar procedimentos armazenados para executar inserções, atualizações e exclusões.

Pré-requisitos

Para concluir esta explicação passo a passo, você precisará do seguinte:

Criando aplicativos baseados no Windows

Como você estará trabalhando com classes do LINQ to SQL e exibindo os dados em um Windows Form, a primeira etapa nesse passo a passo é criar um novo aplicativo do Windows Forms.

Dica

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 Customizing Development Settings in Visual Studio.

Para criar o novo projeto de Aplicativo do Windows

  1. No menu Arquivo, crie um novo projeto.

  2. Dê ao projeto o nome ORDesignerWalkthrough.

    Dica

    O Designer Relacional de Objetos tem suporte em projetos do Visual Basic e de C#. Sendo assim, crie o novo projeto em uma dessas linguagens.

  3. Clique no modelo do Aplicativo do Windows Forms e clique em OK. Para obter mais informações, consulte Implementando aplicativos cliente com o .NET Framework.

    O projeto ORDesignerWalkthrough é criado e adicionado ao Gerenciador de Soluções.

Adicionando um arquivo de classes LINQ to SQL ao projeto (abrindo o Designer Relacional de Objetos)

Classes de entidade são criadas e armazenadas em arquivos do LINQ to SQL (arquivos .dbml). O Designer Relacional de Objetos é aberto quando você abre um arquivo. dbml. Adicione arquivos .dbml a projetos selecionando o modelo Classes LINQ to SQL na caixa de diálogo Adicionar Novo Item.

Para adicionar um novo arquivo .dbml a um projeto

  1. No menu Projeto, clique em Adicionar Novo Item.

  2. Clique no modelo Classes LINQ to SQL e digite Northwind.dbml na caixa Nome.

  3. Clique em Adicionar.

    Um arquivo de classes LINQ to SQL vazio (Northwind.dbml) é adicionado ao projeto, e o Designer Relacional de Objetos é aberto.

Após adicionar o novo arquivo LINQ to SQL ao projeto, a superfície de design vazia é aberta, exibindo dois painéis separados. O painel à esquerda é o painel de entidades, onde as classes de entidade são exibidas e configuradas. O painel à direita é o painel de métodos que exibe os métodos de DataContext adicionados ao designer. Se o painel de métodos não estiver visível, clique com o botão direito do mouse em uma área vazia no painel de entidades e clique em Mostrar Painel de Métodos. A superfície vazia inteira representa um DataContext pronto para ser configurado. O nome de DataContext corresponde ao nome que você forneceu para o arquivo. dbml. Para essa explicação passo a passo, como você denominou o arquivo LINQ to SQL como Northwind.dbml, o DataContext é chamado de NorthwindDataContext. Você pode verificar isso clicando na área vazia no designer e inspecionando a janela Propriedades.

Dica

A classe DataContext contém métodos e propriedades para se conectar a um banco de dados e manipular os dados no banco de dados (por exemplo, realizar inserções, atualizações e exclusões).Para obter mais informações, consulte Métodos de DataContext (Designer de Objeto Relacional).

Criando classes de cliente e entidade de pedido

Crie classes LINQ to SQL que são mapeadas para tabelas de banco de dados arrastando tabelas do Gerenciador de Servidores/Database Explorer para o Designer Relacional de Objetos. O resultado é uma classe de entidade do LINQ to SQL que mapeia para a tabela no banco de dados.

Para adicionar uma classe de entidade de cliente ao Designer Relacional de Objetos

  1. No Gerenciador de Servidores/Database Explorer, localize as tabelas na versão do SQL Server do banco de dados de exemplo Northwind. Para obter mais informações, consulte Como se conectar ao banco de dados Northwind.

  2. Arraste o nó Customers do Gerenciador de Servidores/Database Explorer para a superfície do Designer Relacional de Objetos.

    Uma classe de entidade chamada Customer é criada. Ela tem propriedades que correspondem às colunas na tabela Customers. A classe de entidade é chamada de Customer (não Customers) porque representa um único cliente da tabela Customers.

    Dica

    Esse comportamento de renomeação é chamado de pluralização.Ele pode ser ativado ou desativado na Caixa de diálogo Opções (Visual Studio).Para obter mais informações, consulte Como: Gire Pluralization em e desativado (o designer do/R).

  3. Arraste o nó de Orders do Gerenciador de Servidores/Database Explorer para a superfície do Designer Relacional de Objetos.

    Uma classe de entidade chamada Order é criada, junto com uma associação de Customer_Order (relação) para a classe de entidade de Customer. Ela tem propriedades que correspondem às colunas na tabela Orders.

    Dica

    A classe de entidade é chamada Order porque representa um único pedido.A classe pai (Customer) tem uma propriedade Orders que representa a coleção de pedidos para aquele cliente específico.Para mais informações sobre associações LINQ to SQL, consulte Como criar uma associação (relação) entre classes LINQ to SQL (Designer Relacional de Objetos).

Criando uma fonte de dados de objeto com a classe Entidade de Cliente

Classes de entidade, assim como outras classes que têm propriedades públicas, podem ser usadas como fontes de dados de objeto. Elas podem ser adicionadas à janela Fontes de Dados e arrastados para formulários para criar controles associados a dados (controles que são associados aos valores nas propriedades públicas do objeto). Adicionar classes de entidade à janela Fontes de Dados executando o Assistente para Configuração de Fonte de Dados e clicando em Objeto para a fonte de dados no assistente.

Para adicionar o cliente como uma fonte de dados de objeto na janela Fontes de Dados

  1. No menu Compilar, clique em Compilar ORDesignerWalkthrough para criar o projeto.

  2. No menu Dados, clique em Mostrar Fontes de Dados.

  3. Na janela Fontes de Dados, clique em Adicionar Nova Fonte de Dados.

  4. Clique em Objeto na página Escolher um Tipo de Fonte de Dados e clique em Avançar.

  5. Expanda o nó ORDesignerWalkthrough (o nó com o nome do projeto) e localize e selecione a classe Customer.

    Dica

    Se a classe Customer não estiver disponível, cancele o assistente, compile o projeto e execute o assistente novamente.

  6. Clique em Concluir para criar a fonte de dados e adicionar a classe de entidade Customer à janela Fontes de Dados.

Criando controles associados a dados para exibir os dados em um Windows Form

Crie controles que estão associados a classes de entidade arrastando os itens de fonte de dados do LINQ to SQL da janela Fontes de Dados para um Windows Form.

Para adicionar controles associados às classes de entidade

  1. Abra Form1 na exibição Design.

  2. Da janela Fontes de Dados, arraste o nó Customer para o Form1.

    Dica

    Para exibir a janela Fontes de Dados, clique em Mostrar Fontes de Dados no menu Dados.

  3. Arraste o nó Orders da janela Fonte de Dados para o Form1. Coloque-o em CustomerDataGridView.

  4. Abra Form1 na exibição de código.

  5. Adicione o seguinte código ao formulário, global para o formulário, fora de qualquer método específico, mas dentro da classe Form1:

    Private NorthwindDataContext1 As New NorthwindDataContext
    
    private NorthwindDataContext northwindDataContext1
        = new NorthwindDataContext();
    
  6. Crie um manipulador de eventos para o evento Form_Load e adicione o seguinte código ao manipulador:

    CustomerBindingSource.DataSource = NorthwindDataContext1.Customers
    
    customerBindingSource.DataSource
        = northwindDataContext1.Customers;
    

Testando o aplicativo

Execute o aplicativo. Nesse momento, o formulário contém um DataGridView exibindo os dados da tabela Customers e um segundo DataGridView exibindo os dados de pedidos do cliente selecionado.

Dica

Observe que o botão de salvar está desabilitado.(Você implementará a funcionalidade de salvar na próxima seção.)

Para testar o aplicativo

  1. Pressione F5.

  2. Verificar se os dados aparecem nas grades.

  3. Selecione um cliente.

  4. Verifique se os pedidos exibidos são para o cliente selecionado.

  5. Feche o formulário. (No menu Depurar, clique em Parar Depuração.)

Implementando a funcionalidade de salvar

Conforme observado anteriormente, por padrão, o botão de salvar não está habilitado e a funcionalidade de salvar não está implementada. Além disso, o código não será automaticamente adicionado para salvar dados modificados no formulário quando os controles associados a dados forem criados para fontes de dados de objeto. Essa seção explica como habilitar o botão de salvar e implementar a funcionalidade de salvar para objetos LINQ to SQL.

Para implementar a funcionalidade de salvar

  1. Abra Form1 na exibição Design.

  2. Selecione o botão de salvar em CustomerBindingNavigator. (O botão identificado com um ícone de disquete).

  3. Na janela Propriedades, defina a propriedade Habilitado como True.

  4. Clique duas vezes no botão de salvar para criar um manipulador de eventos e alternar para o Editor de Códigos.

  5. Adicione o código a seguir no manipulador de eventos do botão de salvar:

    Try
        NorthwindDataContext1.SubmitChanges()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    
    try
    {
        northwindDataContext1.SubmitChanges();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    

Testando o aplicativo

Execute o aplicativo. O botão de salvar deve estar habilitado, e a capacidade de salvar dados está disponível.

Para testar o aplicativo

  1. Pressione F5.

  2. Modifique alguns dados em qualquer grade. (Navegue fora da linha editada na grade para confirmar as alterações no processo.)

  3. Clique no botão de salvar para salvar as alterações de volta para o banco de dados.

  4. Feche o formulário.

  5. Pressione F5 e verifique se as alterações foram persistidas (ou localize a tabela no banco de dados para verificar se as alterações foram salvas).

Associando a consultas LINQ

Além de associar o CustomerBindingSource ao DataContext, você também pode associar diretamente às consultas do LINQ. Para obter mais informações sobre como criar consultas do LINQ, consulte Introdução a consultas LINQ (C#).

Bb384428.collapse_all(pt-br,VS.140).gifAdicionando um botão e uma TextBox ao formulário

Para saber como associar controles a consultas do LINQ, adicione controles ao formulário que permitem inserir um parâmetro de consulta e, em seguida, execute a consulta.

Para adicionar controles ao formulário

  1. Abra Form1 na exibição Design.

  2. Adicione TextBox ao formulário e defina sua propriedade Name como CityTextBox.

  3. Adicione um Botão ao formulário e defina as seguintes propriedades:

    • Name = RunQueryButton

    • Text = Run Query

Bb384428.collapse_all(pt-br,VS.140).gifVinculação de dados para a consulta LINQ

Adicione código para executar uma consulta do LINQ. A consulta usa o valor tipado em CityTextBox como um parâmetro de consulta.

Para associar a uma consulta LINQ

  • Clique duas vezes em RunQueryButton e adicione o seguinte código ao manipulador de eventos RunQueryButton_click:

    Dim CustomersQuery = From customers in NorthwindDataContext1.Customers _
        Where customers.City = CityTextBox.Text _
        Select customers
    
    CustomerBindingSource.DataSource = CustomersQuery
    
    var CustomersQuery = from customers in northwindDataContext1.Customers
                          where customers.City == CityTextBox.Text
                          select customers;
    
    customerBindingSource.DataSource = CustomersQuery;
    

Testando o aplicativo

Execute o aplicativo. Agora você pode consultar clientes de uma cidade específica.

Para testar o aplicativo

  1. Pressione F5.

  2. Digite London na caixa de texto.

  3. Clique no botão Executar consulta.

  4. Verifique se apenas os clientes que têm um valor de London em sua propriedade City são exibidos.

Substituindo o comportamento padrão para realizar atualizações (inserções, atualizações e exclusões)

Por padrão, a lógica para executar atualizações é fornecida em tempo de execução do LINQ to SQL. O tempo de execução cria instruções padrão de Insert, Update e Delete com base na instrução Select que é usada para preencher sua classe de entidade com dados. Quando você não deseja usar o comportamento padrão, poderá configurar o comportamento de atualização e designar procedimentos armazenados específicos para executar as inserções, as atualizações e as exclusões necessárias para manipular os dados no seu banco de dados. Você também pode fazer isso quando o comportamento padrão não é gerado, por exemplo, quando as classes de entidade mapeiam para tabelas unidas. Além disso, você pode substituir o comportamento de atualização padrão quando o banco de dados exige acesso à tabela por meio dos procedimentos armazenados.

Dica

Essa seção exige a disponibilidade dos procedimentos armazenados adicionais InsertCustomer, UpdateCustomer e DeleteCustomer para o banco de dados Northwind.Para obter detalhes sobre como criar esses procedimentos armazenados, consulte Instruções passo a passo: criando procedimentos armazenados atualizados para a tabela Clientes do Northwind.

Para substituir o comportamento padrão de atualização

  1. Abra o arquivo LINQ to SQL no Designer Relacional de Objetos. (Clique duas vezes no arquivo Northwind.dbml no Gerenciador de Soluções.)

  2. No Gerenciador de Servidores/Database Explorer, expanda o nó de Procedimentos armazenados de bancos de dados Northwind e localize o procedimento armazenado UpdateCustomers.

  3. Arraste o procedimento armazenado UpdateCustomers para o Designer Relacional de Objetos.

    O procedimento armazenado UpdateCustomers é adicionado ao painel dos métodos como um método DataContext. Para obter mais informações, consulte Métodos de DataContext (Designer de Objeto Relacional).

  4. Selecione a classe de entidade Customer no Designer Relacional de Objetos.

  5. Na janela de Propriedades, selecione o comando para substituir. (Inserir, atualização, ou excluir). Para esse exemplo, selecione a propriedade Atualizar.

  6. Clique nas reticências ao lado de Usar tempo de execução para abrir a caixa de diálogo Configurar Comportamento.

  7. Selecione Personalizar.

  8. Selecione o método UpdateCustomers na lista Personalizar.

  9. Inspecione a lista de Argumentos de Método e de Propriedades de Classe e observe que há dois Argumentos de Método e duas Propriedades de Classe para algumas colunas na tabela. Isso facilita o controle de alterações e cria as instruções que conferem a existência de violações de simultaneidade.

  10. Mapeie os argumentos de método originais (original _ArgumentName) para as propriedades originais (PropertyName (Original)). Para essa explicação passo a passo, você precisará mapear o argumento Original_CustomerID para a propriedade CustomerID (original).

    Dica

    Por padrão, os argumentos do método mapearão para as propriedades da classe quando os nomes corresponderem.Se os nomes de propriedade foram modificados e não corresponderem entre a tabela e a classe de entidade, você poderá ter que selecionar a propriedade da classe equivalente para a qual mapear se o designer não puder determinar o mapeamento correto.Além disso, se os argumentos do método não tiverem propriedades da classe válidas para a qual mapear, você poderá definir o valor de Propriedades de Classe como (Nenhum).

  11. Clique em OK.

Testando o aplicativo

Execute o aplicativo novamente para verificar se o procedimento armazenado UpdateCustomers atualiza corretamente o registro do cliente no banco de dados.

Para testar o aplicativo

  1. Pressione F5.

  2. Localize a coluna ContactName na grade para ALFKI.

  3. Altere o nome de Maria Anders para Anders.

  4. Navegue fora da linha para confirmar a alteração.

  5. Clique no botão de salvar.

  6. Feche o formulário.

  7. Pressione F5 para executar novamente o aplicativo e verificar se somente Anders aparece na coluna ContactName para ALFKI.

Próximas etapas

Dependendo dos seus requisitos do aplicativo, há várias etapas que você pode querer realizar depois de criar as classes de entidade do LINQ to SQL. Entre algumas das melhorias que você pode fazer neste aplicativo estão:

Consulte também

Conceitos

Visão geral do designer do/R

Outros recursos

Designer Relacional de Objetos

LINQ to SQL [wd_LINQSQL]

LINQ General Programming Guide

LINQ to ADO.NET

LINQ Documentation Roadmap

Novidades para desenvolvimento de aplicativos de dados no Visual Studio 2012

Acessando dados no Visual Studio