Поделиться через


сопоставление типов

Сопоставление типов процесс, через который типы объектов данных, определенными поставщиками данных родовым типы данных сопоставлены с указанным обработчиком метаданных Visual Studio.

Проблема данные-источник-специфического сопоставления в родовым принципах ("б. Ипроблемы сопоставления") возникает при наличии типы объектов, какие типы других типов, таких как, например, когда тип ограничения уникального ключа или первичного ключа тип уникального ключа. Таким образом, тип или данные-источник-специфического может быть обобщен (например, a Constraintлибо четко были сформулированы (a) PrimaryKey" UniqueKeyили ForeignKey). Если родовые понятия она не обобщены или зернисты, возникающих b-g проблемы сопоставления.

Сопоставление выполняется в 4 флейворах:

  • Сопоставление типа 1:1

  • 1: сопоставление типов g

  • б. 1 - Сопоставление типов

  • б. сопоставление типов g

В следующих разделах рассматриваются каждый из вариантов в свою очередь.

Сопоставление типа 1:1

Самое простое однозначное сопоставление регистра и происходит, когда поставщик данных имеет один тип данные-источник-специфического, который сопоставляет до только один универсальный шаблон сопоставленный тип. Можно применить однозначное сопоставление например, задав атрибут underlyingType в элементе MappedType, который сопоставляет универсальный шаблон сопоставленный тип (xml-элемента MappedType) к типу данные-источник-специфического (типа) xml. Это продемонстрировано в следующем примере XML:

Следующий код XML из xml-файла DataObjectSupport показано объявление столбца данные-источник-специфического:

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

Следующий код XML из xml-файла DataObjectSupport показано объявление типа TableColumn универсального сопоставляемого, который сопоставляется к вышеуказанному типу столбца с помощью атрибута 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>

Чтобы расширить примера рассмотрим архитектуру ограничений unique в SQL Server. Для каждого ограничения уникальности всегда индекс, и все метаданные для предоставления уникального ограничения предоставляются с помощью его индекса. Можно сказать, что уникальный ключ, а затем тип индекса в SQL Server. В тех случаях, когда универсальных понятие, индекс поддерживает представление о том, что может также быть уникальным ключом, сопоставление 1:1 и легко обрабатывается.

1: сопоставление типов g

Случае сопоставление типа данные-источник-специфического к сопоставленному родовому типу несколько сложнее. Для иллюстрации рассмотрите в предыдущем примере (для сопоставления, 1:1). В этом случае универсальный шаблон сопоставленный тип UniqueKey; это приводит к появлению 1.И сопоставление, при котором один тип данные-источник-специфического (индекс) представляет несколько универсальный шаблон сопоставленный тип (оба UniqueKey и Index). Поставщик данных теперь необходимо сопоставить типы, сопоставленные кратным к типу объекта, как показано в следующем:

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

Обратите внимание filter атрибут, указанный в UniqueKey понятие. Это лучший способ определить подмножество экземпляров типа данные-источник-специфического, который фактически представляет это универсальный шаблон понятие.

б. 1 - Сопоставление типов

Случае поставщика данных данные-источник-специфического сопоставление нескольких типов с одной родовому сопоставленному типу требует указания единственного сопоставленный тип для нескольких базовых типов. Например, предположим, что поставщик данных определяет типы данные-источник-специфического UniqueKey и ForeignKey, типы ограничений. Затем предположим, сопоставленный тип, универсальный шаблон Constraint, который включает все типы ограничений. Результат a в. 1 сопоставление-что, несколько типов данные-источник-специфического, представленные одним родовым сопоставленным типом.

Включение этом случае требуется больше, чем предыдущие битовые XML так, как показано в следующем примере:

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

б. сопоставление типов g

Наконец, случае сопоставления несколько типов данные-источник-специфического к нескольким родовым принципах эффективное сочетание 1.И и в. сопоставления 1. Например, предположим, что поставщик данных данные-источник-специфического разделяет понятия первичного ключа из других ограничений (например, из уникального ключа и внешнего ключа). В этом случае может принимать типы данные-источник-специфического PrimaryKey и Constraint. Теперь предположим, что родовые понятия UniqueKey и ForeignKey, где UniqueKey понятие включает как первичный и уникальные ключи. Это a б. И сопоставление, в котором несколько типов данные-источник-специфического представлены несколькими родовыми сопоставлянными типами.

Для обработки этом случае поставщик данных применяет данное сопоставление типов, сопоставленные с указанием кратен в нескольких типах данные-источник-специфического, как показано в следующем 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>

См. также

Основные понятия

идентификатор и сопоставление свойств

Идентификаторы и свойства объекта типа сопоставления с универсальным типам