Inferir colunas
Depois que o ADO.NET tiver determinado, a partir de um documento XML, quais elementos inferir como tabelas para um DataSet, ele irá inferir as colunas para essas tabelas. O ADO.NET 2.0 introduziu um novo mecanismo de inferência de esquema que infere um tipo de dados fortemente tipado para cada elemento simpleType. Nas versões anteriores, o tipo de dados de um elemento simpleType inferido sempre foi xsd:string.
Migração e compatibilidade com versões anteriores
O método ReadXml usa um argumento do tipo InferSchema. Esse argumento permite que você especifique o comportamento de inferência compatível com versões anteriores. Os valores disponíveis para a enumeração InferSchema são mostrados na tabela a seguir.
InferSchema
Fornece compatibilidade com versões anteriores sempre inferindo um tipo simples como String.
InferTypedSchema
Infere um tipo de dados fortemente tipado. Gera uma exceção se usada com um DataTable.
IgnoreSchema
Ignora qualquer esquema embutido e carrega os dados no esquema DataSet existente.
Atributos
Conforme definido em Tabelas de Inferência, um elemento com atributos será inferido como uma tabela. Os atributos desse elemento serão inferidos como colunas para a tabela. A propriedade ColumnMapping das colunas será definida como MappingType.Attribute para garantir que os nomes de coluna sejam gravados como atributos se o esquema for gravado novamente em XML. Os valores dos atributos são armazenados em uma linha na tabela. Por exemplo, considere o seguinte XML:
<DocumentElement>
<Element1 attr1="value1" attr2="value2"/>
</DocumentElement>
O processo de inferência produzirá uma tabela chamada Element1 com duas colunas, attr1 e attr2. A propriedade ColumnMapping para as duas colunas será definida como MappingType.Attribute.
DataSet: DocumentElement
Tabela: Element1
attr1 | attr2 |
---|---|
value1 | value2 |
Elementos sem atributos ou elementos filho
Se um elemento não tiver elementos ou atributos filho, ele será inferido como uma coluna. A propriedade ColumnMapping da coluna será definida como MappingType.Element. O texto para elementos filho é armazenado em uma linha na tabela. Por exemplo, considere o seguinte XML:
<DocumentElement>
<Element1>
<ChildElement1>Text1</ChildElement1>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
O processo de inferência produzirá uma tabela chamada Element1 com duas colunas, ChildElement1 e ChildElement2. A propriedade ColumnMapping para as duas colunas será definida como MappingType.Element.
DataSet: DocumentElement
Tabela: Element1
ChildElement1 | ChildElement2 |
---|---|
Text1 | Text2 |