Compartir a través de


Asignación de tipos

La asignación de tipos es el proceso con el que el motor de metadatos de Visual Studio se asignan a los tipos de objeto de datos definidos por los proveedores de datos de los tipos de datos genéricos definido.

El problema de asignar dato-origen-específico los conceptos genéricos (“b: gque asigna problema”) se produce cuando hay tipos de objetos que son clases de otros tipos, as, por ejemplo, cuando una clave única es una clase de restricción, o una clave principal es una clase de clave única. Por consiguiente, un tipo dato-origen-específico podría o ser general (por ejemplo, Constraint) o específico (como PrimaryKey, UniqueKey, o ForeignKey). Si los conceptos genéricos son equivalente no generalizados o específicos, se encuentra BG que asigna problema.

Asignación de tipo aparece en cuatro tipos:

  • Asignación de tipos de 1:1

  • 1: asignación de tipos de g

  • b: 1 Asignación de tipos

  • b: asignación de tipos de g

Las secciones siguientes tratan cada uno de los casos a su vez.

Asignación de tipos de 1:1

Una asignación unívoca es el caso más simple y se produce cuando un proveedor de datos tiene un solo tipo dato-origen-específico asignada a un solo tipo asignado genérico. Puede aplicar una asignación unívoca como esto especificando el atributo de underlyingType en el elemento de MappedType, que asigna el tipo asignado genérico (elemento XML MappedType) al tipo dato-origen-específico (elemento de tipo XML). Esto se muestra en el siguiente ejemplo de XML:

El siguiente XML del archivo XML de DataObjectSupport muestra la declaración dato-origen-específica de columna:

<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>

El siguiente XML del archivo XML de DataObjectSupport muestra la declaración del tipo asignado genérico de TableColumn asignado al tipo de columna anterior con el atributo de 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>

para extender el ejemplo, considere la arquitectura de restricciones UNIQUE en SQL Server. Para cada restricción UNIQUE siempre hay un índice, y todos los metadatos para exponer restricciones UNIQUE se proporcionan por su índice. Es decir, a continuación, que una clave única es una clase de índice en SQL Server. En caso de que un concepto genérico, índice, admite la idea que puede que también es una clave única, la asignación es 1:1 y se administran fácilmente.

1: asignación de tipos de g

el caso de asignar un tipo dato-origen-específico a un tipo asignado genérico es algo más complicado. Para mostrar, considere el ejemplo anterior (del 1:1 que asigna, que es). en este caso, sin embargo, el tipo asignado genérico es UniqueKey; esto produce un 1:g que asigna, donde un único tipo dato-origen-específico (índice) representa varias tipo asignado genérico ( UniqueKey y Index). Un proveedor de datos ahora necesita asignar tipos asignados varias a un tipo de objeto, como en el siguiente:

<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>

observe el atributo de filter especificado en el concepto de UniqueKey . Ésta es la mejor manera de identificar el subconjunto de instancias del tipo dato-origen-específico que representa realmente este concepto genérico.

b: 1 Asignación de tipos

El caso de un proveedor de datos que asigna tipos dato-origen-específicos varias a un solo tipo asignado genérico requiere especificar un solo tipo asignado en tipos subyacentes. Por ejemplo, suponga que el proveedor de datos define los tipos dato-origen-específicos UniqueKey y ForeignKey, que son clases de restricciones. A continuación, suponga que hay un tipo asignado genérico, Constraint, que abarca todos los tipos de restricción. el resultado es b: 1 asignación-que es, tipos dato-origen-específicos varias representados por un único tipo asignado genérico.

habilitar este caso requiere un poco más XML que los casos anteriores, como en el ejemplo siguiente:

<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: asignación de tipos de g

Finalmente, el caso de asignar tipos dato-origen-específicos múltiples a los conceptos genéricos varias es en realidad una combinación de 1:g y b: asignaciones 1. Por ejemplo, suponga que un proveedor de datos dato-origen-específico separa los conceptos de la clave principal de otros restricciones (por ejemplo, de clave y de clave externa únicas). En este caso podría haber tipos dato-origen-específicos PrimaryKey y Constraint. Ahora, suponga que hay conceptos genéricos UniqueKey y ForeignKey, donde el concepto de UniqueKey abarca claves principales y únicas. Éste es b: g que asigna, en las que los tipos asignados genéricos varias representan los tipos dato-origen-específicos múltiples.

Para controlar este caso, el proveedor de datos aplica esta asignación especificando tipos asignados varias en tipos dato-origen-específicos múltiples, como se muestra en el siguiente código 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>

Vea también

Conceptos

identificador y asignación de propiedad

Identificadores y propiedades del tipo de objeto a los tipos genéricos