Passo a passo: Personalizando a inserção, atualização e exclusão de comportamento de classes de entidade
Publicado: abril de 2016
O LINQ to SQL Tools no Visual Studio 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, você pode usar a tecnologia LINQ para acessar os bancos de dados SQL. Para obter mais informações, consulte LINQ (Consulta Integrada à Linguagem).
Por padrão, a lógica para executar atualizações é fornecida pelo tempo de execução do LINQ to SQL. O tempo de execução cria instruções padrão Insert, Update e Delete com base no esquema da tabela (as definições de coluna e as informações da chave primária). 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 trabalhar com os dados no 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 as exibições. 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. Para obter mais informações, consulte Customizing Operations By Using Stored Procedures.
Dica
Essa explicação passo a passo exige a disponibilidade dos procedimentos armazenados 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.
Essa explicação passo a passo fornece as etapas que você deve seguir para substituir o comportamento padrão de tempo de execução LINQ to SQL para salvar dados de volta para um banco de dados usando procedimentos armazenados.
Durante essa explicação passo a passo, será ensinado como realizar as seguintes tarefas:
Crie um novo aplicativo do Windows Forms e adicione um arquivo LINQ to SQL a ele.
Crie uma classe de entidade que está mapeada para a tabela Customers Northwind.
Crie uma fonte de dados de objeto que referencia a classe de cliente LINQ to SQL.
Crie um Windows Form que contém um DataGridView que está associado à classe Customer.
Implemente a funcionalidade de salvar para o formulário.
Crie métodos de DataContext adicionando procedimentos armazenados ao Designer Relacional de Objetos.
Configure a classe Customer 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:
Acessar a versão do SQL Server do banco de dados de exemplo Northwind. Para obter mais informações, consulte Como instalar bancos de dados de exemplo.
Os procedimentos armazenados InsertCustomer, UpdateCustomer e DeleteCustomer para o banco de dados Northwind. Para obter mais informações, consulte Instruções passo a passo: criando procedimentos armazenados atualizados para a tabela Clientes do Northwind.
Criando um aplicativo e adicionando classes LINQ to SQL
Como você estará trabalhando com classes do LINQ to SQL e exibindo os dados em um Windows Form, crie um novo aplicativo do Windows Forms e adicione um arquivo de classes LINQ to SQL.
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, confira Personalizando o IDE.
Para criar um novo projeto de aplicativo do Windows que contém classes LINQ to SQL
No menu Arquivo, crie um novo projeto.
Dê ao projeto o nome UpdatingwithSProcsWalkthrough.
Dica
O Designer Relacional de Objetos tem suporte em projetos de Visual Basic e C#. Portanto, crie o novo projeto em uma dessas linguagens.
Clique no modelo do Aplicativo do Windows Forms e clique em OK. Para obter mais informações, consulte Aplicativos cliente.
O projeto de UpdatingwithSProcsWalkthrough é criado e adicionado ao Gerenciador de Soluções.
No menu Projeto, clique em Adicionar Novo Item.
Clique no modelo Classes LINQ to SQL e digite Northwind.dbml na caixa Nome.
Clique em Adicionar.
Um arquivo de classes LINQ to SQL vazio (Northwind.dbml) é adicionado ao projeto, e o Designer Relacional de Objetos é aberto.
Criando a Classe Entidade de Cliente e o Objeto de Fonte de Dados
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 são classes de entidade do LINQ to SQL que mapeiam para as tabelas no banco de dados. Depois de criar classes de entidade, elas podem ser usadas como fontes de dados de objeto assim como outras classes que têm propriedades públicas.
Para criar uma classe de entidade Customer e configurar uma fonte de dados com ela
No Gerenciador de Servidores/Database Explorer, localize a tabela Customer 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.
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. Para obter mais informações, consulte Como: ative em pluralization e off (Object Relational Designer).
No menu Compilar, clique em Compilar UpdatingwithSProcsWalkthrough para criar o projeto.
No menu Dados, clique em Mostrar Fontes de Dados.
Na janela Fontes de Dados, clique em Adicionar Nova Fonte de Dados.
Clique em Objeto na página Escolher um Tipo de Fonte de Dados e clique em Avançar.
Expanda o nó UpdatingwithSProcsWalkthrough 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.
Clique em Concluir para criar a fonte de dados e adicionar a classe de entidade Customer à janela Fontes de Dados.
Criando um DataGridView para exibir os dados do cliente 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 que estão associados às classes de entidade
Abrir Form1 na exibição Design.
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.
Abra o Form1 no Editor de Códigos.
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();
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;
Implementando a funcionalidade de salvar
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 banco de dados 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
Abrir Form1 na exibição Design.
Selecione o botão de salvar no CustomerBindingNavigator (o botão com o ícone de disquete).
Na janela Propriedades, defina a propriedade Habilitado como True.
Clique duas vezes no botão de salvar para criar um manipulador de eventos e alternar para o Editor de Códigos.
Adicione o código a seguir no manipulador de eventos do botão de salvar:
NorthwindDataContext1.SubmitChanges ()
northwindDataContext1.SubmitChanges();
Substituindo o comportamento padrão para realizar atualizações (inserções, atualizações e exclusões)
Para substituir o comportamento padrão de atualização
Abra o arquivo LINQ to SQL no Designer Relacional de Objetos. (Clique duas vezes no arquivo Northwind.dbml no Gerenciador de Soluções.)
Em Gerenciador de Servidores/Database Explorer, expanda o nó Stored Procedures de bancos de dados Northwind e localize os procedimentos armazenados InsertCustomers, UpdateCustomers e DeleteCustomers.
Arraste os três procedimentos armazenados para o Designer Relacional de Objetos.
Os procedimentos armazenados são adicionados ao painel dos métodos como métodos DataContext. Para obter mais informações, consulte DataContext Methods (O/R Designer).
Selecione a classe de entidade Customer no Designer Relacional de Objetos.
Na janela Propriedades, selecione a propriedade Insert.
Clique nas reticências (...) ao lado de Usar tempo de execução para abrir a caixa de diálogo Configurar Comportamento.
Selecione Personalizar.
Selecione o método InsertCustomers na lista Personalizar.
Clique em Aplicar para salvar a configuração para a Classe e o Comportamento selecionados.
Dica
Você pode continuar a configurar o comportamento para cada combinação de classe/comportamento quando você clica em Aplicar depois de cada alteração. Se você alterar a classe ou o comportamento antes de clicar em Aplicar, uma caixa de diálogo de aviso com uma oportunidade de aplicar as alterações será exibida.
Selecione Atualizar na lista Comportamento.
Selecione Personalizar.
Selecione o método UpdateCustomers na lista Personalizar.
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 controlar as alterações e criar as instruções que conferem a existência de violações de simultaneidade.
Mapeie o argumento do método Original_CustomerID para a propriedade de classe 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 forem 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 Relacional de Objetos 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).
Clique em Aplicar para salvar a configuração para a Classe e o Comportamento selecionados.
Selecione Excluir na lista Comportamento.
Selecione Personalizar.
Selecione o método DeleteCustomers na lista Personalizar.
Mapeie o argumento do método Original_CustomerID para a propriedade de classe CustomerID (Original).
Clique em OK.
Dica
Embora isso não seja um problema para essa explicação passo a passo específica, vale observar que o LINQ to SQL manipula automaticamente os valores gerados por banco de dados para as colunas identidade (incremento automático), rowguidcol (GUID gerado por banco de dados) e carimbo de data/hora durante inserções e atualizações. Os valores gerados pelo banco de dados em outros tipos de coluna resultarão inesperadamente em um valor nulo. Para retornar os valores gerados por banco de dados, defina manualmente IsDbGenerated como true
e AutoSync como um dos seguintes: Always, OnInsert ou OnUpdate.
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
Pressione F5.
Modifique um registro na grade para testar o comportamento de atualização.
Adicione um novo registro para testar o comportamento de inserção.
Clique no botão de salvar para salvar as alterações de volta para o banco de dados.
Feche o formulário.
Pressione F5 e verifique se o registro atualizado e o registro inserido recentemente persistiram.
Exclua o novo registro que você criou na etapa 3 para testar o comportamento de exclusão.
Clique no botão de salvar para enviar as alterações e remova o registro excluído do banco de dados
Feche o formulário.
Pressione F5 e verifique se o registro excluído foi removido do banco de dados.
Dica
Se seu aplicativo usar o SQL Server Express Edition, dependendo do valor da propriedade Copiar para Diretório de Saída do arquivo de banco de dados, as alterações podem não aparecer quando você pressiona F5 na etapa 10. Para obter mais informações, consulte Como gerenciar arquivos de dados locais no projeto.
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:
Implementar verificação de simultaneidade durante atualizações. Para obter informações, consulte Optimistic Concurrency: Overview.
Adicionar consultas LINQ para filtrar dados. Para obter informações, consulte Introdução a consultas LINQ (C#).
Consulte também
LINQ to SQL Tools no Visual Studio
LINQ to SQL
LINQ to SQL Queries
DataContext Methods (O/R Designer)
Como: atribuir procedimentos armazenados para executar atualizações, inserções e exclusões (Object Relational Designer)
Novidades para desenvolvimento de aplicativos de dados no Visual Studio 2012