Share via


Crear relaciones entre conjuntos de datos en aplicaciones .NET Framework

Nota:

Los conjuntos de datos y las clases relacionadas son tecnologías heredadas de .NET Framework de principios de la década de 2000 que permiten a las aplicaciones trabajar con datos en memoria mientras están desconectadas de la base de datos. Son especialmente útiles para las aplicaciones que permiten a los usuarios modificar los datos y conservar los cambios en la base de datos. Aunque los conjuntos de datos han demostrado ser una tecnología de gran éxito, se recomienda que las nuevas aplicaciones de .NET usen Entity Framework Core. Entity Framework proporciona una manera más natural de trabajar con datos tabulares como modelos de objetos y tiene una interfaz de programación más sencilla.

Los conjuntos de datos que contienen tablas de datos relacionadas usan objetos DataRelation para representar una relación primaria/secundaria entre las tablas y devolver registros relacionados entre sí. Al agregar tablas relacionadas a conjuntos de datos mediante el Asistente para configuración del origen de datos o el Diseñador de DataSet, se crea y configura el objeto DataRelation automáticamente.

El objeto DataRelation realiza dos funciones:

  • Puede poner a su disposición los registros relacionados con un registro con el que esté trabajando. Proporciona registros secundarios si está en un registro primario (GetChildRows) y un registro primario si está trabajando con un registro secundario (GetParentRow).

  • Puede aplicar restricciones para la integridad referencial, como eliminar registros secundarios relacionados al eliminar un registro primario.

Es importante comprender la diferencia entre una combinación verdadera y la función de un objeto DataRelation. En una combinación verdadera, los registros se toman de las tablas primaria y secundaria y se colocan en un único conjunto de registros plano. Cuando se usa un objeto DataRelation, no se crea ningún nuevo conjunto de registros. En su lugar, DataRelation realiza un seguimiento de la relación entre tablas y mantiene sincronizados los registros primario y secundario.

Objetos y restricciones de DataRelation

También se usa un objeto DataRelation para crear y aplicar las restricciones siguientes:

  • Una restricción única, que garantiza que una columna de la tabla no contiene duplicados.

  • Restricción de clave externa, que se puede usar para mantener la integridad referencial entre una tabla primaria y secundaria de un conjunto de datos.

Las restricciones que especifique en un DataRelation objeto se implementan creando automáticamente los objetos adecuados o estableciendo propiedades. Si crea una restricción de clave externa mediante el objeto DataRelation, las instancias de la clase ForeignKeyConstraint se agregan a la propiedad ChildKeyConstraint del objeto DataRelation.

Una restricción única se implementa simplemente estableciendo la propiedad Unique de una columna de datos en true o agregando una instancia de la clase UniqueConstraint a la propiedad ParentKeyConstraint del objeto DataRelation. Para obtener información sobre cómo suspender restricciones en un conjunto de datos, consulte Desactivación de restricciones al rellenar un conjunto de datos.

Reglas de integridad referencial

Como parte de la restricción de clave externa, puede especificar reglas de integridad referencial que se aplican en tres puntos:

  • Cuando se actualiza un registro primario

  • Cuando se elimina un registro primario

  • Cuando se acepta o rechaza un cambio

Las reglas que puede realizar se especifican en la enumeración Rule y se enumeran en la tabla siguiente.

Regla de restricción de clave externa Acción
Cascade El cambio (actualización o eliminación) realizado en el registro primario también se realiza en los registros relacionados de la tabla secundaria.
SetNull Los registros secundarios no se eliminan, pero la clave externa de los registros secundarios se establece en DBNull. Con esta configuración, los registros secundarios se pueden dejar como "huérfanos", es decir, no tienen ninguna relación con los registros primarios. Nota: El uso de esta regla puede dar lugar a datos no válidos en la tabla secundaria.
SetDefault La clave externa de los registros secundarios relacionados se establece en su valor predeterminado (según lo establecido por la propiedad DefaultValue de la columna).
None No se realiza ningún cambio en los registros secundarios relacionados. Con esta configuración, los registros secundarios pueden contener referencias a registros primarios no válidos.

Para obtener más información sobre las actualizaciones de las tablas de conjuntos de datos, consulte Guardar los datos de nuevo en la base de datos.

Relaciones de solo restricción

Al crear un objeto DataRelation, tiene la opción de especificar que la relación solo se use para aplicar restricciones; es decir, que no se utilice también para acceder a registros relacionados. Puede usar esta opción para generar un conjunto de datos que sea ligeramente más eficaz y que contenga menos métodos que uno con la funcionalidad de registros relacionados. Sin embargo, no podrá acceder a los registros relacionados. Por ejemplo, una relación de solo restricción impide eliminar un registro primario que todavía tiene registros secundarios, y no puede acceder a los registros secundarios a través del elemento primario.

Creación manual de una relación de datos en el Diseñador de DataSet

Al crear tablas de datos mediante las herramientas de diseño de datos en Visual Studio, las relaciones se crean automáticamente si la información se puede recopilar del origen de los datos. Si agrega manualmente tablas de datos desde la pestaña Conjunto de datos del Cuadro de herramientas, es posible que tenga que crear la relación manualmente. Para obtener información sobre cómo crear objetos DataRelation mediante programación, vea Agregar objetos DataRelation.

Las relaciones entre tablas de datos aparecen como líneas en el Diseñador de DataSet, con un glifo de clave e infinito que representa el aspecto uno a varios de la relación. De forma predeterminada, el nombre de la relación no aparece en la superficie de diseño.

Nota

Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en este artículo. Puede que esté usando una edición diferente de Visual Studio u otra configuración del entorno. Para obtener más información, vea Personalizar el IDE.

Para crear una relación entre dos tablas de datos

  1. Abra su conjunto de datos en el Diseñador de Dataset. Para más información, consulte Tutorial: Creación de un conjunto de datos en el Diseñador de DataSet.

  2. Arrastre un objeto Relación del cuadro de herramientas Conjunto de datos a la tabla de datos secundaria de la relación.

    Se abrirá el cuadro de diálogo Relación, que rellenará el cuadro Tabla secundaria con la tabla a la que ha arrastrado el objeto Relación.

  3. Seleccione la tabla primaria en el cuadro Tabla primaria. La tabla primaria contiene registros en el lado "uno" de una relación uno a varios.

  4. Compruebe que se muestra la tabla secundaria correcta en el cuadro Tabla secundaria. La tabla secundaria contiene registros en el lado "varios" de una relación uno a varios.

  5. Escriba un nombre para la relación en el cuadro Nombre o deje el nombre predeterminado en función de las tablas seleccionadas. Este es el nombre del objeto DataRelation real en el código.

  6. Seleccione las columnas que unen las tablas en las listas Columnas de clave y Columnas de clave externa.

  7. Seleccione si desea crear una relación, una restricción o ambas.

  8. Seleccione o desactive el cuadro Relación anidada. Al seleccionar esta opción se establece la propiedad Nested en true, y se provoca que las filas secundarias de la relación se aniden dentro de la columna primaria cuando esas filas se escriben como datos XML o se sincronizan con XmlDataDocument. Para más información, consulte Anidar objetos DataRelations.

  9. Establezca las reglas que se aplicarán al realizar cambios en los registros de estas tablas. Para obtener más información, vea Rule.

  10. Haga clic en Aceptar para crear la relación. Aparece una línea de relación en el diseñador entre las dos tablas.

Para mostrar un nombre de relación en el Diseñador de DataSet

  1. Abra su conjunto de datos en el Diseñador de Dataset. Para más información, consulte Tutorial: Creación de un conjunto de datos en el Diseñador de DataSet.

  2. En el menú Datos, seleccione el comando Mostrar etiquetas de relación para mostrar el nombre de la relación. Borre ese comando para ocultar el nombre de la relación.