Mapping dei tipi
Il mapping dei tipi è il processo con cui i tipi di oggetto dati definiti da provider di dati vengono mappati ai tipi di dati generici definiti dal motore dei metadati di Visual Studio.
Il problema di eseguire il mapping dati-database di origine-specifico ai concetti generiche (“b: gche esegue il mapping problema„) si verifica quando sono tipi di oggetti che sono tipi di altri tipi, come, ad esempio, quando una chiave univoca è un tipo di vincolo, o una chiave primaria è un tipo di chiave univoca. Di conseguenza, un tipo dati-database di origine-specifico potrebbe essere generalizzato, ad esempio Constraint) o granulare (come PrimaryKey, UniqueKey, o ForeignKey). Se i concetti generici sono equivalenti non generalizzati o granulari, si verifica la BG che si esegue il mapping del problema.
Il mapping dei tipi si verifica in quattro versioni:
Mapping dei tipi di 1:1
1: mapping dei tipi g
b: 1 Mapping dei tipi
b: mapping dei tipi g
Nelle sezioni seguenti viene illustrato ognuno dei casi a sua volta.
Mapping dei tipi di 1:1
Un mapping uno-a-uno è il caso più semplice e si verifica quando un provider di dati con un singolo tipo dati-database di origine-specifico che esegue il mapping a un solo tipo mappato generico. È possibile applicare un mapping uno-a-uno come questo specificando l'attributo di underlyingType nell'elemento di MappedType, che esegue il mapping del tipo mappato generico (elemento XML di MappedType) al tipo dati-database di origine-specifico (elemento XML di tipo. Come illustrato nell'esempio di XML:
Nell'XML del file XML di DataObjectSupport illustrata la dichiarazione dati-database di origine-specifica di colonne:
<Type name="Column" preferredOrdering="Database, Schema, Table, Id">
<IdentifierRef name="SubSchemaObjectTypeIdentifier" arguments="Table" />
<Properties>
<PropertyListRef name="ColumnProperties" />
<Property name="Computed" type="System.Boolean" />
</Properties>
<Services>
<ServiceRef name="SubSchemaObjectTypeObjectSelectorService" arguments="Table, Table, Column, ColumnSelectorMappings" />
<ServiceRef name="SubSchemaObjectTypeDSRefBuilderService" arguments="Table, 101, Field, 102" />
</Services>
</Type>
Nell'XML del file XML di DataObjectSupport illustrata la dichiarazione del tipo mappato generico di TableColumn mappato al tipo di sopra la colonna con l'attributo di underlyingType:
<MappedType name="TableColumn" underlyingType="Column">
<Selection restrictions="{Catalog},{Schema},{Table},{Name}" />
<IdentifierRef name="MappedSubTypeIdentifier" arguments="Table" />
<Properties>
<Property name="Name" isIdentifierPart="true" />
<Property name="Ordinal" underlyingMember="Id" />
<PropertyListRef name="MappedSubTypeDataTypeProperties" />
<Property name="IsNullable" underlyingMember="Nullable" />
<Property name="IsComputed" underlyingMember="Computed" />
</Properties>
</MappedType>
Per estendere esempio, si consideri l'architettura dei vincoli univoci in SQL Server. Per ogni vincolo univoco è sempre presente un indice e tutti i metadati per esporre i vincoli univoci disponibili mediante il relativo indice. È possibile impostare, pertanto, che una chiave univoca è un tipo di indice in SQL Server. Nei casi in cui un concetto generico, indice, supporta il concetto che potrebbe essere una chiave univoca, il mapping è 1:1 e viene gestito facilmente.
1: mapping dei tipi g
Il caso di eseguire il mapping di un tipo dati-database di origine-specifico a un tipo mappato generico è leggermente più complesso. Per illustrare, si consideri l'esempio precedente (per 1:1 che esegue il mapping, ovvero). in questo caso, tuttavia, il tipo mappato generico è UniqueKey; ciò comporta un 1:g che esegue il mapping, in cui un singolo tipo dati-database di origine-specifico (indice) rappresenta più di uno tipo mappato generico (sia UniqueKey che Index). Un provider di dati ora necessario eseguire il mapping dei tipi mappati più a un tipo di oggetto, come nell'esempio seguente:
<MappedType name="TableUniqueKey" underlyingType="Index">
<Selection restrictions="{Catalog},{Schema},{Table},{Name}" filter="KeyType > 0" />
<IdentifierRef name="MappedSubTypeIdentifier" arguments="Table" />
<Properties>
<Property name="Name" isIdentifierPart="true" />
<Property name="IsPrimary" underlyingMember="KeyType">
<Conversion>
<Calculate expr="IIF({0} = 1, true, false)" exprType="System.Boolean" />
</Conversion>
</Property>
</Properties>
</MappedType>
<MappedType name="Index" underlyingType="Index">
<Selection restrictions="{Catalog},{Schema},{Table},{Name}" />
</MappedType>
Si noti l'attributo di filter specificato nel concetto di UniqueKey . Questo è il modo migliore per identificare il sottoinsieme delle istanze del tipo dati-database di origine-specifico che rappresenta realmente questo concetto generico.
b: 1 Mapping dei tipi
La combinazione dei tipi dati-database di origine-specifici più di un mapping del provider di dati a un singolo tipo mappato generico è necessario specificare un solo tipo mappato sui tipi sottostanti più. Ad esempio, si supponga che il provider di dati definisce i tipi dati-database di origine-specifici UniqueKey e ForeignKey, ovvero tipi di vincoli. Quindi, si supponga che sia presente un tipo mappato generico, Constraint, inclusi tutti i tipi di vincolo. il risultato è b: 1 mapping-che è, tipi dati-database di origine-specifici più rappresentati da un singolo tipo mappato generico.
Abilitare questo caso è richiesto un certo più XML dei casi precedenti, come nel seguente esempio:
<Type name="ForeignKey" preferredOrdering="Database, Schema, Table, Name">
…
</Type>
<Type name="UniqueKey" preferredOrdering="Database, Schema, Table, Name">
…
</Type>
<MappedType name="Constraint" underlyingType="ForeignKey">
…
</MappedType>
<MappedType name="Constraint" underlyingType="UniqueKey">
…
</MappedType>
b: mapping dei tipi g
Infine, caso dei tipi dati-database di origine-specifici mapping di più a concetti più generici è una combinazione di 1:g e b: mapping 1. Ad esempio, si supponga che un provider di dati dati-database di origine-specifico separi i concetti di una chiave primaria da altri vincoli (ad esempio, la chiave univoca e dalla chiave esterna). In questo caso tuttavia potrebbero essere tipi dati-database di origine-specifici PrimaryKey e Constraint. A questo punto, si supponga che siano concetti generici UniqueKey e ForeignKey, dove il concetto di UniqueKey include sia primario che le chiavi univoche. Si tratta di b: g che esegue il mapping, in cui i tipi dati-database di origine-specifici più sono rappresentati dai tipi mappati più generici.
Per gestire questa situazione, il provider di dati applica questo mapping specificando i tipi mappati più sui tipi dati-database di origine-specifici più, come illustrato nel seguente codice XML:
<Type name="PrimaryKey" preferredOrdering="Database, Schema, Table, Name">
…
</Type>
<Type name="Constraint" preferredOrdering="Database, Schema, Table, Name">
…
</Type>
<MappedType name="UniqueKey" underlyingType="PrimaryKey">
…
</MappedType>
<MappedType name="UniqueKey" underlyingType="Constraint">
<Selection restrictions="{Catalog},{Schema},{Table},{Name}" filter="IsUnique = true" />
</MappedType>
<MappedType name="ForeignKey" underlyingType="Constraint">
<Selection restrictions="{Catalog},{Schema},{Table},{Name}" filter="IsForeign = true" />
</MappedType>
Vedere anche
Concetti
Identificatore e mapping di proprietà
Identificatori di tipo e proprietà dell'oggetto mapping ai tipi generici