Introdução a objetos DataRelation
DataSets que contêm tabelas de dados relacionadas usam objetos DataRelation para representar uma relação pai/filho entre as tabelas e para retornar registros relacionados de um para o outro. Adicionar tabelas relacionadas a DataSets usando o Data Source Configuration Wizard, ou o Dataset Designer, cria e configura o objeto DataRelation para você. Para obter mais informações sobre retornar registros relacionados, consulte Como acessar registros em DataTables relacionados. Para obter informações sobre como criar relações de dados, consulte Como criar DataRelations com o Designer de Conjunto de Dados.
O objeto DataRelation executa duas funções:
Ele pode tornar disponíveis os registros relacionados para um registro no qual você estiver trabalhando. Ele fornece registros filho se você estiver em um registro pai (GetChildRows) e um registro pai se você estiver trabalhando com um registro filho (GetParentRow).
Isto pode impor restrições para integridade referencial, como excluir registros relacionados a filho quando você exclui um registro pai.
É importante compreender a diferença entre uma associação verdadeira e a função de um objeto DataRelation. Em uma associação verdadeira, os registros são tirados das tabelas pai e filho e colocados em um único e simples conjunto de registros. Quando você usa um objeto DataRelation, nenhum novo conjunto de registros é criado. Em vez disso, a relação rastreia o relacionamento entre tabelas e mantém registros pai e filho em sincronia.
Objetos DataRelation e restrições
Um objeto DataRelation também é usado para criar e impor as seguintes restrições:
Uma restrição exclusiva, que garante que uma coluna na tabela não contenha duplicatas.
Uma restrição de chave externa, que pode ser usada para manter a integridade referencial entre uma tabela pai e filho em um DataSet.
Restrições que você especificar em um objeto DataRelation são implementadas criando automaticamente objetos apropriados ou definindo propriedades. Se você criar uma restrição de chave externa usando o objeto DataRelation, instâncias da classe ForeignKeyConstraint são adicionadas à propriedade ChildKeyConstraint do DataRelation.
Uma restrição exclusiva é implementada simplesmente definindo a propriedade Unique de um coluna de dados como true ou adicionando uma instância da classe UniqueConstraint ao DataRelation ParentKeyConstraint do objeto. Para obter informações sobre suspender restrições em um DataSet, consulte Como desativar restrições ao preencher um conjunto de dados.
Regras de integridade referencial
Como parte de restrição de chave externa, você pode especificar regras de integridade referencial que são aplicadas em três pontos:
Quando um registro pai é atualizado
Quando um registro pai é excluído
Quando uma alteração for aceita ou rejeitada
As regras que você pode fazer estão especificadas na enumeração Rule e estão listadas na tabela a seguir.
Regra de Restrição da Chave externa |
Ação |
---|---|
A alteração (atualização ou exclusão) feita para o registro pai é feita no registros relacionados na tabela filho também. |
|
Registros filho não são excluídos, mas a chave externa nos registros filho é definida como DBNull. Com essa configuração, registros filho podem ser deixados como "órfãos" — ou seja, eles não têm relação com registros pai. Dica Usar esta regra pode resultar em dados inválidos na tabela filho. |
|
A chave externa nos registros filho relacionados é definida como seu valor padrão (conforme estabelecido pela propriedade DefaultValue da coluna). |
|
Nenhuma alteração é feita a registros filho relacionados. Com essa configuração, registros filho podem acabar contendo referências a registros pai inválidos. |
Para obter mais informações sobre atualizações em tabelas de dataset, consulte Salvando dados em conjuntos de dados.
Relações somente-Restrição
Ao criar um objeto DataRelation, você tem a opção de especificar que a relação seja usada somente para impor restrições — isto é, ela não será usada também para acessar registros relacionados. Esta opção permite a você para gerar um DataSet que é um pouco mais eficiente e que contém menos métodos que aquela com a funcionalidade related-Records. Entretanto, não será capaz de acessar registros relacionados. Por exemplo, uma relação somente-restrição impede você de excluir um registro pai que ainda possui filhos, e você não pode acessar os registros filho através do pai.
Consulte também
Referência
Assistente para Configuração da Fonte de Dados
Conceitos
Trabalhando com conjuntos de dados no Visual Studio