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


Работа с типами данных DDEX и MappedTypes

Схема определяет единственный корневой элемент DataObjectSupport, прыгает иерархия элементов, которые поддерживают типы объектов внешних данных в Visual Studio.

Элемент DataObjectSupport

DataObjectSupport элемент имеет 4 типа дочерних элементов:

  • Ноль или более Import элементы

  • Ноль или более Define элементы

  • Ноль или один Types элементы

  • Ноль или один MappedTypes элементы

Import элемент и Define указывается, что позволяет импортировать определения поддержки объекта из источников внешних данных или задает элемент элементы, которые многократно используются в других частях XML, соответственно, но это не является неотъемлемой частью определение типов поставщика данных и сопоставления типов универсальным типам. Их можно использовать для создания XML поддержки объекта данных. Однако тип-родственные элементы состоят из Types элемент, который может содержать a RootType и один или несколько Type элементы и MappedTypes элемент, который может содержать один или несколько MappedType элементы. Набор Type элементы определяют типы объектов, предоставляемые поставщиком данных и относится к источнику данных. Эти типы сопоставляются с помощью объекта MappedType элементы, которые ссылаются на свои соответствовать Type элемент через атрибут underlyingType.

Следующий код XML показывает структуру Type и MappedType элементы по отношению к DataObjectSupport элемент верхнего уровня.

<DataObjectSupport xmlns=http://.../DataObjectSupport.xsd>
    <Types>
        <RootType>
            ...
        </RootType>
        <Type name="Column">
            ...
        </Type>
        <Type name="View">
            ...
        </Type>
        ...
    </Types>
    <MappedTypes>
        <MappedType name="TableColumn" underlyingMember="Column">
            ...
        </MappedType>
        <MappedType name="View" underlyingMember="View">
            ...
        </MappedType>
        ...
    </MappedTypes>
</DataObjectSupport>

Дочерние элементы типа

Type элемент имеет 3 допустимых дочерних элемента:

  1. Identifier. Обязательный. Указывает уникальный идентификатор типа. Например, a Table объект может быть определен базой данных, схемой и именем. Подробное обсуждение идентификаторов и частей идентификатора см. в разделе Идентификаторы и свойства объекта типа сопоставления с универсальным типам.

  2. Properties. Необязательный. Определяет коллекцию свойств заданного типа объекта, затем определяются с помощью Property элемент. Например, a Table объект может иметь свойство CreateDate.

  3. Services. Необязательный. Определяет коллекцию служб, каждая из указанных Service элемент, задающий службы, реализованные для типа.

Кроме того, каждый тип должен содержать следующие атрибуты:

  • Атрибут имени, представляющая имя типа объекта.

Каждый тип может дополнительно содержать следующие атрибуты:

  • Атрибут nameProperty (a), если объект не имеет свойство " имя " или (б) обладает свойством name со значением, отличным от "name".

  • PreferredOrdering атрибут, который specificies порядок сортировки является предпочтительным при выборе объекты типа.

Описание элементов и атрибутов типа

Элемент Identifier

Идентификаторы типа уникальным образом определяющим объекты данных, возвращенных из перечисления коллекции типов объекта источника данных. Идентификатор состоит из частей данных, позволяющие вызывающие объекты для различения указанный объект из другого из одного и того же типа. Например, идентификатор таблицы базы данных SQL Server состоит из имени базы данных, имени схемы и имени таблицы.

Примечание

Среди типов объектов, корневой тип является исключением из правила идентификатора.Корневой тип идентификатора не требуется, поскольку всегда только один экземпляр класса корневого типа.

Раздел определяет набор определений типа идентификатора Part элементы. Каждая часть принимает необходимое name атрибут и необязательный атрибут типа, указывающий тип платформы .NET Framework. Если атрибут типа не указан, то по умолчанию тип System.String. Все Part элементы, которые принимаются вместе составляющих уникальный идентификатор. Идентификатор определен Identifier элемент. При необходимости идентификатор можно указать один раз, а затем использовать повторно в XML с помощью IdentifierRef элемент.

В следующем xml-коде показан пример идентификатора типа:

<Type name="Table">
    <Identifier>
        <Part name="Database" />
        <Part name="Schema" />
        <Part name="Name" />
    </Identifier>
</Type>

Этот код иллюстрирует xml-описание a Table тип, имеющий из трех частей идентификатора. Каждое Part элемент описывающую заданную часть идентификатора, а также включает a name атрибут, который ссылается на данные для части идентификатора указанного объекта в перечислении.

Элемент свойств

Типы объектов могут дополнительно содержать свойства. Раздел свойств определения заданного типа описывает пары " имя/тип-значения, которые определяют данные для каждого свойства в перечислении. Свойства задаются с помощью Properties элемент, который группы являются отдельными Property элементы. Каждое Property элемент, в свою очередь, должен содержать a name атрибут, который определяет тип и имя имеет необязательно type атрибут, specifiyies тип платформы .NET Framework свойства. Кроме того, свойства можно указать один раз и использовать повторно в XML. Это достигается путем добавления a PropertyRef элемент Properties группирование элементов для повторного использования заданный элемент или путем добавления a PropertyListRef элемент для повторного использования группу в составе ранее определенные свойства.

В следующем коде показаны способы определения свойства могут найти элемент типа.

<Define name="ColumnProperties">
   <Property name="Name" isIdentifierPart="true" />
   <Property name="Id" type="System.Int32" />
   <PropertyListRef name="DataTypeProperties" />
   <Property name="Nullable" type="System.Boolean" />
   <Property name="IsIdentity" type="System.Boolean" />
   <Property name="IdentitySeed" type="System.Int32" />
   <Property name="IdentityIncrement" type="System.Int32" />
</Define>
<Type name="Column" preferredOrdering="Database, Schema, Table, Id">
   <IdentifierRef name="SubSchemaObjectTypeIdentifier" arguments="Table" />
   <Properties>
      <PropertyListRef name="ColumnProperties" />
      <Property name="Computed" type="System.Boolean" />
   </Properties>
</Type>

Предыдущий пример кода демонстрирует использование в качестве встроенного определения свойств вычисленного свойства и ссылки на ранее указанному списку свойств столбца.

Элементы свойства могут быть версия, так что только указанные свойства будут доступны для данной версии сервера.

Элемент службы

Службы могут быть указаны для типов объектов путем добавления каждая служба в качестве a Service элемент как часть Services группы. Служба может быть относится к типу или специализации более общей службы. Можно указать класс, реализующий службу как строка implementationType атрибут Service элемент, который может быть разрешен фабрикой объекта поставщика GetType() метод (в IVsDataProviderObjectFactory). Если тип реализации не указан, то поставщик должен предоставить реализацию службы в глобальную IVsDataConnectionSupport поддержка сущность, которая реализуется поставщиком. Кроме того, если параметры определены для службы, служба должна также реализовать IVsDataObjectSupport сущность поддержки.

В следующем примере кода показано, как указать службу IVsDataObjectSelector:

<Type name="Column" preferredOrdering="Database, Schema, Table, Id">
   <IdentifierRef name="SubSchemaObjectTypeIdentifier" arguments="Table" />
   <Properties>
   ...
   </Properties>
   <Services>
      <Service type="IVsDataObjectSelector">
         <Parameters method="SelectObjects">
            <Parameter>
               <ParameterRef name="UrnPart" arguments="Database, 0" />
               <ParameterRef name="UrnPartWithSchema" arguments="$(parentUrnPartName), 1, 2" />
               <ParameterRef name="UrnPart" arguments="$(urnPartName), 3"/>
            </Parameter>
            <Parameter>
               <ParameterRef name="SelectorMapping" arguments="Database, Database_Name" />
               <ParameterRef name="SelectorMapping" arguments="Schema, $(parentUrnPartName)_Schema" />
               <ParameterRef name="SelectorMapping" arguments="$(parentType), $(parentUrnPartName)_Name" />
               <ParameterListRef name="$(selectorMappings)" />
            </Parameter>
         </Parameters>
      </Service>
      ...
   </Services>
</Type>

В предыдущем примере кода, то заметка ParameterRef указывает на ранее указанному параметру использование Define элемент. Аналогично ParameterListRef указывает на группу в составе ранее определенные параметры. Эти определения не включены в пример кода.

атрибут name

name атрибут задает имя типа объекта.

атрибут nameProperty

Типы объектов могут указывать свойство, указывающее свойства объекта, используя неизвестное имя nameProperty атрибут. Этот атрибут определяет имя конкретного свойства в типе, который представляет собой неполное имя экземпляров типа. Если оно не указано, будет выбрано, то свойство "имя", если он существует; в противном случае экземплярами типа считаются безыменным.

preferredOrdering атрибут

Типы могут использовать preferredOrdering атрибут, чтобы указать порядок сортировки для объектов, возвращаемых из хранилища объекта заданного типа.

Как правило, сортировка по возрастанию в разных частях идентификатора, но для этого не требуется. В некоторых ситуациях может потребоваться отсортировать на более логических условий, например, что упорядочение порядкового номера столбцов, а не в алфавитном порядке по имени столбца.

Дочерние элементы MappedType

MappedType элемент имеет 3 допустимых дочерних элемента:

  1. Selection. Обязательный. Содержит сведения о сопоставлении, которое разрешает возврат базовые объекты из источника данных, соответствующий выделенному фрагменту объектов сопоставленных объектов.

  2. Identifier. Необязательный. Указывает уникальный идентификатор сопоставленного типа и обеспечивает сопоставление идентификатор типа, зависящие от источника данных.

  3. Properties. Необязательный. Определяет коллекцию свойств сопоставленного типа объекта, которые затем определяются с помощью Property элемент. Например, a Table универсальный шаблон объект может иметь свойство CreateDate универсальный шаблон.

Кроме того, каждый тип должен содержать следующие атрибуты:

  • Атрибут имени, представляющая имя сопоставляемого типа объекта.

Каждый тип может дополнительно содержать следующие атрибуты:

  • Атрибут underlyingType, который связывает универсальный шаблон сопоставленный тип к соответствующему типу, зависящие от источника данных.

Описание элементов и атрибутов MappedType

Элемент выделения

Selection элемент позволяет выделение объектов из источника данных, предоставляя данные сопоставления, чтобы ограничить данные, возвращаемые из хранилища объекта. restrictions атрибут содержит ограничения идентификатора, используемые для ограничения объема возвращаемых объектов в вызове выделения. Обратите внимание, что ограничения свойства не поддерживаются в текущей версии DDEX. Если не существует однозначное сопоставление между родовым ограничением и основной частью идентификатора; SubstitutionValue должны быть добавлены в элементы SubstitutionValues группа выполнить необходимое преобразование; часть идентификатора в этом случае должна быть заменена by {n, где} n отсчитываемый от нуля индекс целого числа значения подстановки. Кроме того, если однозначное сопоставление между родовым сопоставленным типом и базовым типом, зависящие от источника данных, a filter атрибут может быть добавлен, чтобы добавить дополнительное состояние фильтрации к дальнейшему является сужающим вниз набор возвращаемых объектов. Кроме того, для определения порядка объектов, возвращенных из источника данных ordering атрибут может быть добавлен.

В следующем примере кода демонстрируется применение Selection элемент:

<MappedType name="Table" underlyingType="Table">
   <Selection restrictions="{Catalog},{Schema},{Name}" />
   ...
</MappedType>

Элемент Identifier

Указывает уникальный идентификатор сопоставленного типа и обеспечивает сопоставление идентификатор типа, зависящие от источника данных. Идентификатор части идентификатора сочетания, которые объекты базы данных, которые совместно однозначно идентифицируют сопоставленный тип. Каждое Part элемент может содержать преобразования, представленные в виде инструкции преобразования Conversion элемент обязателен для сопоставления универсальных значение частью идентификатора к значению части идентификатора источника данных.

В следующем примере кода демонстрируется применение Identifier и Part элементы.

<MappedType name="Table" underlyingType="Table">
   <Identifier>
      <Part name="Catalog" underlyingMember="Database" />
      <Part name="Schema" underlyingMember="Schema" />
      <Part name="Name" underlyingMember="Name" />
   </Identifier>
</MappedType>

Элемент свойств

Свойства сопоставленного типа описывают родовые свойства, которые сопоставлены со свойствами, зависящие от источника данных через underlyingMember атрибут Property элемент. Каждое свойство имеет необходимого name атрибут, который задает имя универсального свойства. isIdentifierPart атрибут отображается, соответствует ли свойство в вопросе часть идентификатора с тем же именем. Для преобразования значений свойств из свойства, зависящие от источника данных к родовому свойству, свойство может содержать преобразования, представленные в виде инструкции преобразования Conversion элемент.

Кроме того, свойства можно указать один раз и использовать повторно в XML. Это достигается путем добавления a PropertyRef элемент Properties группирование элементов для повторного использования заданный элемент или путем добавления a PropertyListRef элемент для повторного использования группу в составе ранее определенные свойства.

В следующем коде показаны способы определения свойства могут найти, сопоставленный элемент типа.

<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" />
      <Property name="DataType" underlyingMember="DataType" />
      <Property name="IsNullable" underlyingMember="Nullable" />
      <Property name="IsComputed" underlyingMember="Computed" />
   </Properties>
</MappedType>

атрибут name

Атрибут name указывает имя сопоставляемого типа объекта.

атрибут underlyingType

Этот атрибут указывает имя базового типа, зависящие от источника данных, из которого сопоставленный тип объекта извлекает его члены.

Тип объекта данных и функции MappedType DDEX

Типы объектов данных содержит 4 основных функций. Они описывают:

  1. Примите запрос Как перечисления из обработчика метаданных Visual Studio и преобразовать его в эквивалентный запрос с использованием основной интерфейс объекта (выделениеIVsDataObjectSelector в Microsoft.VisualStudio.Data.Services.SupportEntities пространство имен).

  2. Данные, возвращенные основным технологиями выделения объекта на основе идентификатора и свойств.

  3. Построение a DSRef объект с помощью IDSRefBuilder интерфейс.

  4. Тип, идентификатор и свойства в родовом образом для сопоставляемого типа, где это возможно.

4 Функции приведенной выше подробно обсуждаются в следующих разделах: