Compartir a través de


Deducir relaciones

Si un elemento que se deduce como una tabla tiene un elemento secundario que también se deduce como una tabla, se creará una DataRelation entre las dos tablas. Se agregará una nueva columna denominada "ParentTableName_Id" tanto a la tabla creada para el elemento primario como a la tabla creada para el elemento secundario. La propiedad ColumnMapping de esta columna de identidad se establecerá en MappingType.Hidden. La columna será una clave principal de incremento automático para la tabla primaria y se utilizará para la DataRelation entre las dos tablas. El tipo de datos de la columna de identidad agregada será System.Int32, a diferencia del tipo de datos de todas las demás columnas deducidas, que es System.String. También se creará una ForeignKeyConstraint con DeleteRule = Cascade utilizando la nueva columna tanto en la tabla primaria como en la tabla secundaria.

Por ejemplo, tomemos el siguiente código XML:

<DocumentElement>
  <Element1>
    <ChildElement1 attr1="value1" attr2="value2"/>
    <ChildElement2>Text2</ChildElement2>
  </Element1>
</DocumentElement>

El proceso de inferencia producirá dos tablas: "Element1" y "ChildElement1".

La tabla "Element1" tendrá dos columnas: "Element1_Id" y "ChildElement2". La propiedad ColumnMapping de la columna "Element1_Id" se establecerá en MappingType.Hidden. La propiedad ColumnMapping de la columna "ChildElement2" se establecerá como MappingType.Element. La columna "Element1_Id" se establecerá como clave principal de la tabla "Element1".

La tabla "ChildElement1" tendrá tres columnas: "attr1", "attr2" y "Element1_Id". La propiedad ColumnMapping de las columnas "attr1" y "attr2" se establecerá en MappingType.Attribute. La propiedad ColumnMapping de la columna "Element1_Id" se establecerá en MappingType.Hidden.

Se creará una DataRelation y una ForeignKeyConstraint utilizando las columnas "Element1_Id" de ambas tablas.

DataSet: DocumentElement

Table: Element1

Element1_Id ChildElement2
0 Text2

Table: ChildElement1

attr1 attr2 Element1_Id
value1 value2 0

DataRelation: Element1_ChildElement1

ParentTable: Element1

ParentColumn: Element1_Id

ChildTable: ChildElement1

ChildColumn: Element1_Id

Nested: True

ForeignKeyConstraint: Element1_ChildElement1

Column: Element1_Id

ParentTable: Element1

ChildTable: ChildElement1

DeleteRule: Cascade

AcceptRejectRule: None

Vea también

Deducir la estructura relacional de DataSet de XML | Cargar DataSet desde XML | Cargar la información de esquema de DataSet desde XML | DataRelations anidadas | XML y DataSet | Crear y utilizar DataSets