与 DDEX 数据类型和 MappedTypes 一起使用

模式定义一个根元素, DataObjectSupport,限制元素的层次结构支持外部数据对象类型 Visual Studio。

DataObjectSupport 元素

DataObjectSupport 元素包含子元素的四种类型:

  • 零个或多 Import 元素

  • 零个或多 Define 元素

  • 零个或一 Types 元素

  • 零个或一 MappedTypes 元素

提供 Import 元素和 Define 元素允许导入定义从外部数据对象支持源或定义在 XML 的其他部分重新使用,分别的元素,但是,它们不是定义数据提供程序类型和映射类型的组成部分对泛型类型。 它们可用于使创作数据对象支持更简单的 XML。 但是,类型相关的元素包括 Types 元素,可以包含 RootType 和一个或多 Type 元素和 MappedTypes 元素,可以包含一个或多 MappedType 元素。 设置 Type 元素定义数据提供程序显示的对象类型,这就是特定于数据源。 这些对象类型通过链接回其对应的 Type 元素通过 underlyingType 属性的 MappedType 元素映射。

下面的 XML 有关 DataObjectSupport 顶级元素显示 TypeMappedType 元素的布局。

<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 元素具有三个允许的子元素:

  1. Identifier. 必选。 指定类型的唯一标识符。 例如, Table 对象可能会标识具有数据库架构、和名称的组合。 有关标识符和标识符部件的完整讨论,请参见 映射到泛型类型的对象类型标识符和属性

  2. Properties. 可选。 定义特定目标类型的属性的集合,使用 Property 元素,然后指定。 例如, Table 对象可以有 CreateDate 属性。

  3. Services. 可选。 定义服务的集合,每个指定的 Service 元素,表示为类型实现的服务。

此外,每个类型必须具有以下特性:

  • 表示目标类型名称的名称特性。

每个类型都可以选择具有以下属性:

  • nameProperty 属性,如果对象) 没有名称属性或 (b) 具有值为的名称属性除 “名称”以外的。

  • ,当选择该类型的对象时, preferredOrdering 的属性的首选该 specificies 排序顺序。

打印元素和属性的说明

标识符元素

类型标识符唯一标识从数据源对象类型的集合的枚举返回的数据对象。 标识符由允许调用方与其他同一类型区分指定对象中的数据部分组成。 例如, 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>

此代码声明一个具有三部分标识符 Table 类型的一个 XML 声明。 每个 Part 元素描述标识符的特定部分,并包含引用数据。指定对象的标识符部分枚举中的 name 属性。

属性元素

目标类型可以选择具有特性。 特定类型定义的属性节描述类型名称/值对针对每个属性指定数据在枚举。 使用 Properties 元素,属性指定,组各个 Property 元素。 每个 Property 元素而后者又必须包含指定类型的名称并有一个选项 type 的属性 specifiyies 属性的 .NET framework 类型的 name 属性。 此外,属性在 XML 可以一次定义和重新使用。 这是通过添加 PropertyRef 元素。 Properties 组元素重用定义的元素,或者通过将 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>

前面的代码示例演示对的引用之前定义的使用计算的属性的内联定义属性和列属性。

属性元素的版本可以控制,因此,仅指定的属性为特定服务器版本可用。

服务元素

作为 Services 组的一部分,服务可以对目标类型是通过将每个服务作为 Service 元素。 服务可以是特定于类型或泛型的专用化。 可以指定实现服务为 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>

在使用 Define 元素, ParameterRef 指向以前已定义参数的前面的代码示例中的注释。 同样, ParameterListRef 指向以前定义的参数的一组。 这些定义在代码示例中未包括。

name 特性

name 属性指定目标类型的名称。

nameProperty 属性

目标类型可以通过使用 nameProperty 属性,指定对象的属性的非限定名称的属性。 此属性在表示该类型的实例的非限定名称指定类型的定义的属性的名称。 如果未指定,称为 “名称”属性被选中,如果存在,否则实例该类型将被视为无名称。

preferredOrdering 的属性

类型在给定类型的对象存储返回的对象可以使用 preferredOrdering 属性指定排序顺序。

通常,排序是升序的各种标识符部件,但是,它不是必需的)。 在某些情况下,您在一个更具逻辑性的标准可能需要排序,例如,提供序号排序列而非字母顺序按列名。

MappedType 子元素

MappedType 元素具有三个允许的子元素:

  1. Selection. 必选。 包含允许从数据源返回的基础对象与映射的对象选择相应的映射的信息。

  2. Identifier. 可选。 指定将映射的类型的唯一标识符并提供映射到数据源的特定类型的标识符。

  3. Properties. 可选。 定义一个映射的目标类型的属性的集合,使用 Property 元素,然后指定。 例如, Table 泛型对象可以有 CreateDate 常规属性。

此外,每个类型必须具有以下特性:

  • 表示映射的目标类型名称的名称特性。

每个类型都可以选择具有以下属性:

  • 与其对应的数据源特定类型链接泛型映射的类型的 underlyingType 属性。

MappedType 元素和属性的说明

选择元素

Selection 元素通过提供映射的信息从对象存储限制返回的数据允许对象的选择来自数据源的。 restrictions 属性包含用于的标识符限制限制在选择返回的数据量对象调用。 请注意属性来限制在 DDEX 的当前版本不支持。 如果没有一对一映射泛型限制和一个基础标识符部件之间,如 SubstitutionValues 组中应添加 SubstitutionValue 元素执行必要的转换;应在替换标识符部件n{},其中 n 是替换值的从零开始的整数索引。 此外,; 如果没有一对一映射。泛型映射的类型和基础数据源特定类型之间, filter 属性可以添加添加附加的筛选条件的到进一步缩小设置返回的对象。 此外,指定排序从数据源中返回的对象, ordering 属性可以添加。

下面的代码示例阐释 Selection 元素:

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

标识符元素

指定将映射的类型的唯一标识符并提供映射到数据源的特定类型的标识符。 该标识符是标识符部件的组合,是数据库对象进行唯一标识该映射的类型。 每个 Part 元素可以在 Conversion 元素包含转换,表示为转换步骤,需要将一般标识符部件值到数据源标识符部件值。

下面的代码示例阐释 IdentifierPart 元素。

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

属性元素

一个映射类型的属性描述映射到数据源特定属性通过在 Property 元素的 underlyingMember 属性的常规属性。 每个特性具有指定泛型属性的名称所需的 name 属性。 isIdentifierPart 属性指示所讨论的属性是否符合标识符部件具有相同的名称。 若要将从数据源特定属性的属性值转换为常规属性,该属性只能在 Conversion 元素包含转换,表示为转换步骤。

此外,属性在 XML 可以一次定义和重新使用。 这是通过添加 PropertyRef 元素。 Properties 组元素重用定义的元素,或者通过将 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 属性

此特性指定映射的目标类型中检索其成员基础数据源特定类型的名称。

DDEX 数据对象类型和 MappedType 功能

数据对象类型有四个主要功能。 它们描述:

  1. 如何接受从 Visual Studio 元数据引擎的枚举请求并将其转换为等效的请求使用基础对象选择接口 (在 Microsoft.VisualStudio.Data.Services.SupportEntities 命名空间的IVsDataObjectSelector )。

  2. 数据由基础对象选择技术返回基于标识符和属性。

  3. 使用 IDSRefBuilder 接口,如何生成 DSRef 对象。

  4. 在适当的时候类型、标识符和属性泛型方法映射的类型为; 否则为。

列出的四个功能上面在下列主题详细讨论: