Compartilhar via


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 criaram aplicativos de dados no Visual Studio 2005 e versões anteriores, o código gerado automaticamente salvo alterado dados somente à primeira tabela arrastada da janela de Fontes de Dados . 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.)

Iniciando no Visual Studio 2008, datasets tipados são aprimorados por um novo componente de TableAdapterManager . TableAdapterManager reduz o código necessário para salvar dados em várias tabelas relacionadas de várias rotinas com várias linhas de código para uma única chamada de método: 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 de 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 obter informações detalhadas, consulte Como habilitar e desabilitar 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 conjunto de dados.

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 primeiro as Atualizações, depois as Inserções e as Exclusões.

Dica

É 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.

Dica

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

Instruções passo a passo: salvando dados de tabelas de dados relacionados (atualização hierárquica)

Conceitos

Salvando dados

Visão geral de TableAdapterManager

Outros recursos

Atualização hierárquica