Visão geral de atualização hierárquica
Hierarchical update refere-se ao processo de salvar dados atualizados (de um DataSet com duas ou mais tabelas relacionadas) de volta a um banco de dados mantendo regras de integridade referencial.Referential integrity refere-se às regras de consistência fornecido pelas restrições em um banco de dados que controlam o comportamento ao inserir, atualizar e excluir registros relacionados.Por exemplo, é a integridade referencial que força você a criar um registro de cliente antes de criar pedidos desse cliente.
Quando os desenvolvedores criavam aplicativos de dados no Visual Studio de 2005 e versões anteriores, o código gerado automaticamente salva os dados alterados somente à primeira tabela arrastada da Fontes de dados janela.Ao arrastar tabelas adicionais da janela Data Sources, os usuários tinham que adicionar manualmente o código para salvar as alterações nessas tabelas ao banco de dados.Não somente os usuários tinham que adicionar código para chamar o método TableAdapter.Update para cada tabela, como também lógica tinha que ser incorporada para executar as inserções, atualizações e exclusões específicas na ordem apropriada para cada tabela para evitar violações de integridade referencial.(Por exemplo, novos clientes devem ser salvos antes de você adicionar seus pedidos e ordens devem ser excluídas antes de remover um cliente existente.)
A partir de Visual Studio de 2008, datasets tipados são aprimorados por uma nova TableAdapterManager componente.TableAdapterManagerreduz o código que é necessário para salvar os dados em várias tabelas relacionadas de diversas rotinas com muitas linhas de código para uma chamada de método único: TableAdapterManager.UpdateAll(TypedDataset).O TableAdapterManager fornece toda a lógica subjacente que é necessária para manter integridade referencial durante operações de atualização (salvar) entre o conjunto de dados e o banco de dados.Para obter mais informações, consulte Visão geral do TableAdapterManager.
Habilitando atualização hierárquica em um DataSet
Por padrão, hierárquica atualização está ativada para todos os novos conjuntos de dados que são adicionados ou criados em um projeto.Ative ou desative atualização hierárquica definindo a propriedade Hierarchical Update de um dataset tipado no Criando e editando conjuntos de dados tipados para True ou False .Para informações detalhadas, consulte Como: ativar e desativar atualização hierárquica.
Restrições de Chave Externa e Atualizações e Exclusões em Cascata
É importante compreender como restrições de chave externa e comportamento em cascata no banco de dados são criados no código de dataset gerado.
Por padrão, as tabelas de dados em um conjunto de dados são geradas com relacionamentos (DataRelation) que coincidem com os relacionamentos no banco de dados.No entanto, o relacionamento no dataset não é gerado como uma restrição de chave externa.O DataRelation está configurado como Relation Only sem um UpdateRule ou DeleteRule em vigor.
Por padrão, atualizações em cascata e exclusões em cascata estão desativadas mesmo se o relacionamento de banco de dados estiver definido com atualizações em cascata e/ou exclusões em cascata ativadas.Por exemplo, criar um novo cliente e um novo pedido e, em seguida, tentar salvar os dados pode causar um conflito com as restrições de chave externa definidas no banco de dados.Para obter mais informações, consulte Como: configurar restrições de chave estrangeira em um Dataset..
Definindo a ordem para executar atualizações
Definir a ordem para executar atualizações define a ordem das inserções, atualizações e exclusões individuais necessárias para salvar todos os dados modificados em todas as tabelas de um dataset.Quando a atualização hierárquica está ativada, inserções são executadas em primeiro lugar, em seguida, atualizações e, em seguida, exclusões.O TableAdapterManager fornece uma propriedade UpdateOrder que pode ser definida para executar atualizações em primeiro lugar, depois inserções e em seguida exclusões.
Observação |
---|
É importante entender que a ordem de atualização está toda incluída.Isso significa que, quando atualizações são executadas, Inserções são executadas para todas as tabelas no dataset, em seguida, Atualizações são realizadas para todas as tabelas no dataset, em seguida, Exclusões são realizadas para todas as tabelas no dataset. |
Para definir a propriedade UpdateOrder, após arrastar itens da Janela fontes de dados para um formulário, clique em TableAdapterManager na bandeja de componentes e defina a propriedade UpdateOrder na janela Properties.Para obter mais informações, consulte Como: definir a ordem ao executar uma atualização hierárquica.
Criando uma cópia de backup de um Dataset antes de fazer uma atualização hierárquica
Quando você salva dados (chamando o método TableAdapterManager.UpdateAll()), o TableAdapterManager tenta atualizar os dados para cada tabela em uma única transação.Se qualquer parte da atualização para qualquer tabela de falhar, a transação inteira é revertida.Na maioria das situações, a reversão da transação retorna seu aplicativo para seu estado original.No entanto, às vezes, você pode querer restaurar o conjunto de dados a partir da cópia de backup.Um exemplo é quando você está usando valores de incremento automático.Por exemplo, se uma operação de salvar não for bem-sucedida, os valores de incremento automático não são redefinidos no dataset, e o dataset continuará a criar valores de incremento automático, deixando um intervalo na numeração que pode não ser aceitável no seu aplicativo.Em situações em que isso é um problema, o TableAdapterManager fornece uma propriedade BackupDataSetBeforeUpdate que substitui o conjunto de dados existente por uma cópia de backup se a transação falhar.
Observação |
---|
A cópia de backup está apenas na memória durante a execução do método TableAdapterManager.UpdateAll.Portanto, não há acesso programático a este dataset de backup porque ele ou substitui o conjunto de dados original ou sai do escopo assim que o método TableAdapterManager.UpdateAll conclui a execução. |
Consulte também
Tarefas
Passo a passo: Salvando dados de tabelas de dados relacionadas (atualização hierárquica)
Conceitos
Novidades para desenvolvimento de aplicativos de dados no Visual Studio 2012
Visão geral do TableAdapterManager