Arbeiten mit Datentypen arbeiten MappedTypes und DDEX
Das Schema definiert ein einzelnes Stammelement, DataObjectSupport, das eine Hierarchie von Elementen begrenzt, die externes Datenobjekt objekt-typen in Visual Studio unterstützen.
Das DataObjectSupport-Element
Das DataObjectSupport-Element verfügt über vier Typen von untergeordneten Elementen:
Null oder mehr Elemente Import
Null oder mehr Elemente Define
Null oder ein Types-Elemente
Null oder ein MappedTypes-Elemente
Das Import-Element und das Define-Element werden, um das Importieren von Definitionen von externen Datenobjekt unterstützen quellen zuzulassen bereitgestellt oder Elemente zu definieren, die in anderen Teilen des Parameters XML sind jedoch nicht wiederverwendet werden wesentlicher Bestandteil des Definieren von Typen und Datenanbieter Zuordnung von Typen von generischen Typen. Sie können verwendet werden, um leichter Datenobjekt, die Unterstützung für XML zu erstellen. Allerdings bestehen die TYPE-verknüpften Elemente am Types-Element, das RootTypeType und ein oder mehrere Elemente enthält und dem MappedTypes-Element, das möglicherweise eine oder mehrere MappedType-Elemente enthält. Der Satz von Type-Elemente definieren die Objekttypen, die vom Datenanbieter verfügbar gemacht werden und stehen der Datenquelle bestimmt. Diese Objekttypen werden über die MappedType-Elemente zugeordnet, die an ihren entsprechenden Type-Element durch das underlyingType Attribut verknüpfen.
Das folgende XML zeigt das Lay-out der Type und MappedType-Elemente in Bezug auf das DataObjectSupport-Element der obersten Ebene angezeigt.
<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>
Typ-untergeordnete Elemente
Das Type-Element verfügt über drei zulässige untergeordnete Elemente:
Identifier. Erforderlich. Gibt den eindeutigen Bezeichner des Typs an. Beispielsweise wird ein Table-Objekt durch eine Kombination der Datenbank, das Schema und den Namen identifiziert werden. Für eine heftige Diskussion von Bezeichnern und Bezeichner teilen, finden Sie unter Zuordnungs-Objekttyp-Bezeichner und Eigenschaften mit generischen Typen.
Properties. Optional. Definiert eine Auflistung von Eigenschaften für einen angegebenen Objekttyp, die dann mit dem Property-Elements angegeben werden. Zum Beispiel könnte ein Table-Objekt eine CreateDate-Eigenschaft.
Services. Optional. Definiert eine Auflistung von Diensten, die jeweils durch das Service-Element angegeben ist, geben die Dienste, die für diesen Typ implementiert werden.
Darüber hinaus muss jeder Typ die folgenden Attribute enthalten:
- Das name-Attribut, der den Namen des Objekttyps darstellt.
Jeder Typ kann optional die folgenden Attribute enthalten:
Das nameProperty Attribut, wenn das Objekt entweder (A) keine Name-Eigenschaft verfügt oder (b) hat eine Namenseigenschaft mit einem anderen Wert als „Title“.
Das preferredOrdering Attribut, das specificies die gewünschte Sortierreihenfolge Dies ist, wenn Objekte des Typs ausgewählt werden.
Beschreibung Typ-Elementen und Attributen
Bezeichnerelement
Typbezeichner eindeutig identifizieren die Datenobjekte, die von einer Enumeration der Auflistung der Datenquellenobjekt objekt-typen zurückgegeben werden. Der Bezeichner wird von Datenteilen, die von Aufrufern ein angegebenes Objekt aus anderen desselben Typs zu unterscheiden. Beispielsweise wird ein Bezeichner für eine SQL Server-Datenbanktabelle aus einem Datenbanknamen, einem Schemanamen und einem Tabellennamen zusammen.
Hinweis
Wählen Sie Objekttypen ist der Stammtyp eine Ausnahme zur Bezeichner für die Regel.Der Stammtyp muss, da es keinen Bezeichner immer nur eine einzige Instanz des Typs Stamm vorliegt.
Der Kennzeichenteil der Typdefinition gibt einen Satz Part-Elemente an. Jeder Teil davon ausgegangen name ein erforderliches Attribut und ein optionales Typattribut, das einen .NET Framework-Typ angibt. Wenn das type-Attribut nicht angegeben ist, wird der Standardtyp System.String. Alle Part-Elemente, die gemeinsam ausgeführt werden, zusammen den eindeutigen Bezeichner. Der Bezeichner wird durch das Identifier-Element angegeben. Optional kann ein Bezeichner einmal definiert sind und im XML-Code durch das IdentifierRef-Element dann wiederverwendet werden.
Das folgende XML zeigt ein Beispiel für einen Typ Bezeichners an:
<Type name="Table">
<Identifier>
<Part name="Database" />
<Part name="Schema" />
<Part name="Name" />
</Identifier>
</Type>
Durch diesen Code wird eine XML-Beschreibung eines Table-Typs, der einen dreiteiligen Bezeichner verfügt. Jedes Element beschreibt Part einen bestimmten Teil des Bezeichners und enthält auch ein name-Attribut, das die Daten für den Bezeichner des angegebenen Objekts in der Enumeration verweist.
Eigenschaft-Element
Objekttypen können Eigenschaften optional sind. Der Abschnitt Eigenschaft einer angegebenen Typs beschreibt Name/VALUE-Paare TYPE, die Daten für jede Eigenschaft in einer Enumeration angeben. Die Eigenschaften können mithilfe des Properties-Element angegeben, das einzelpersonen- Gruppen Property-Elemente. Jedes Element muss ein Propertyname-Attribut enthalten, das wiederum den Namen des Typs angibt und besitzt ein optionales Attribut, das type specifiyies .NET Framework-Typ der Eigenschaft. Außerdem können Eigenschaften einmal definiert werden und im XML-Code wiederverwendet werden. Dies wird erreicht, indem ein PropertyRef-Element, das Properties Gruppen element hinzufügen, um ein definiertes Element wieder zu verwenden oder indem ein PropertyListRef-Element hinzufügt, um eine Gruppe zuvor definierte Eigenschaften wiederzuverwenden.
Der folgende Code zeigt das Eigenschaftendefinitionen möglicherweise nach einem Typ " - Element ist.
<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>
Das vorangehende Codebeispiel wird die Verwendung einer inline Eigenschaftendefinition für die berechnete Eigenschaft und einem Verweis auf die zuvor definierte Liste von Spalteneigenschaften angezeigt.
Eigenschaftenelemente können Versionsinformationen versehen sein, dass nur bestimmte Eigenschaften für eine angegebene Serverversion verfügbar sind.
Dienste-Element
Dienste können für Objekttypen definiert werden, indem jeden Dienst als Service-Element als Teil der Services Gruppe hinzugefügt wird. Ein Dienst kann in einen Typ oder eine Spezialisierung eines allgemeineren Diensts bestimmt. Sie können die Klasse an, die den Dienst als Zeichenfolge im implementationType-Attribut im Service-Element implementiert, das von der factory- Objekt GetType()-Methode des Anbieters aufgelöst werden kann (in IVsDataProviderObjectFactory). Wenn der Implementierungstyp nicht angegeben wird, muss der Anbieter eine globale Implementierung des Diensts in der IVsDataConnectionSupport Unterstützung entität bereitstellen, die vom Anbieter implementiert wird. Wenn Parameter für den Dienst angegeben sind, muss der Dienst die IVsDataObjectSupport entität unterstützen ebenfalls implementieren.
Der folgende Code zeigt, wie der IVsDataObjectSelector-Dienst definiert:
<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>
Beachten Sie, dass ParameterRef dem vorangehenden Codebeispiel auf einem zuvor definierten Parameter mithilfe des Define-Elements verweist. Entsprechend zeigt ParameterListRef auf eine Gruppe zuvor definierten Parametern. Diese Definitionen werden nicht im Beispielcode enthalten.
name-Attribut
Das name-Attribut gibt den Namen des Objekttyps an.
nameProperty Attribut
Objekttypen können eine Eigenschaft definieren, die den nicht qualifizierten Namen der Eigenschaft des Objekts angibt nameProperty , indem das Attribut verwendet. Dieses Attribut gibt den Namen der Eigenschaft an, die für den Typ definiert ist, der den nicht qualifizierten Namen von Instanzen des Typs darstellt. Wenn kein Name angegeben, wird eine Eigenschaft mit dem Namen „Title“ ausgewählt, sofern vorhanden, andernfalls werden die Instanzen des Typs als namenlos.
preferredOrdering Attribut
Typen können das preferredOrdering-Attribut verwenden, um die Sortierreihenfolge für Objekte an, die vom Datenspeicher Objekt des angegebenen Typs zurückgegeben wird.
In der Regel ist die Sortierung aufsteigend teilen, aber verschiedene Bezeichner sie muss nicht zu sein. In einigen Situationen empfiehlt es sich in einem logischeren Kriterium sortieren, z. B. die ordinale Reihenfolge der Spalten statt alphabetische Reihenfolge vom Spaltennamen bereitstellen.
MappedType-untergeordnete Elemente
Das MappedType-Element verfügt über drei zulässige untergeordnete Elemente:
Selection. Erforderlich. Enthält die Zuordnungsinformationen, die das Zurückgeben einer zugrunde liegenden Objekten aus der Datenquelle entsprechend der Objekt-Auswahl von zugeordneten Objekten ermöglicht.
Identifier. Optional. Gibt den eindeutigen Bezeichner des zugeordneten Typs an und stellt die Zuordnung zum datenquellenspezifischen Typbezeichner bereit.
Properties. Optional. Definiert eine Auflistung von Eigenschaften eines zugeordneten Objekttyp, die dann mit dem Property-Elements angegeben werden. Zum Beispiel könnte ein generisches Objekt Table eine generische Eigenschaft CreateDate.
Darüber hinaus muss jeder Typ die folgenden Attribute enthalten:
- Das name-Attribut, der den Namen des zugeordneten Objekttyp darstellt.
Jeder Typ kann optional die folgenden Attribute enthalten:
- Das underlyingType Attribut, das den generischen zugeordneten Typ in den entsprechenden datenquellenspezifischen Typ verknüpft.
Beschreibung von Elementen und Attributen MappedType
SelectionItem
Das Selection-Element ermöglicht die Auswahl von Objekten aus der Datenquelle, indem die Zuordnungsinformationen bereitstellt, um die Daten einzuschränken, die aus dem Objekt Datenspeicher zurückgegeben werden. Das Attribut restrictions Bezeichner enthält die Einschränkungen, die verwendet werden, um die Objekte zu beschränken, die in einem Aufruf der Auswahl zurückgegeben werden. Beachten Sie, dass es keine Einschränkungen der Eigenschaft in der aktuellen Version von DDEX unterstützt werden. Wenn keine generische Einschränkung einer Zuordnung zwischen 1:1 und einem zugrunde liegende Bezeichner teil gibt, sollten SubstitutionValue-Elemente in der SubstitutionValues Gruppe hinzugefügt werden, um die erforderliche Konvertierung auszuführen. Der Bezeichner der sollte in diesem Fall durchn} {ersetzt werden, wobei n nullbasierten ganzzahligen Index des Werts der Ersetzung. Darüber hinaus wenn keine Zuordnung zwischen 1:1 und dem zugehörigen generischen Typ zugrunde liegende datenquellenspezifischen Typ vorhanden ist, wird ein filter-Attribut hinzugefügt werden, um eine zusätzliche Filtern von weiterem Zustand unten eingrenzen hinzufügen den Satz von zurückgegebenen Objekte. Darüber hinaus um die Reihenfolge der zurückgegebenen Objekte aus der Datenquelle anzugeben, wird das ordering-Attribut hinzugefügt werden.
Im folgenden Codebeispiel wird die Verwendung des Selection-Element:
<MappedType name="Table" underlyingType="Table">
<Selection restrictions="{Catalog},{Schema},{Name}" />
...
</MappedType>
Bezeichnerelement
Gibt den eindeutigen Bezeichner des zugeordneten Typs an und stellt die Zuordnung zum datenquellenspezifischen Typbezeichner bereit. Der Bezeichner ist eine Kombination aus Bezeichnern aufteilen, die Datenbankobjekte sind, die eindeutig den zugeordneten Typ identifizieren. Jedes Part-Element enthält möglicherweise Konvertierungen, dargestellt als Konvertierung Conversion-Element im Schritte, die erforderlich sind, um dem generischen Bezeichner der DROP-Aktion dem Wert bezeichner-Teils Datenquelle zuzuordnen.
Im folgenden Codebeispiel wird die Verwendung der Identifier und Part-Elementen.
<MappedType name="Table" underlyingType="Table">
<Identifier>
<Part name="Catalog" underlyingMember="Database" />
<Part name="Schema" underlyingMember="Schema" />
<Part name="Name" underlyingMember="Name" />
</Identifier>
</MappedType>
Eigenschaft-Element
Die Eigenschaften eines zugeordneten Typs beschreiben die allgemeinen Eigenschaften, die auf die datenquellenspezifischen Eigenschaften zum underlyingMember-Attribut im Property-Element zugeordnet sind. Jede Eigenschaft verfügt über ein erforderliches name-Attribut, das den Namen der generischen Eigenschaft angibt. Das isIdentifierPart-Attribut gibt an, ob die betreffende Eigenschaft auf einen Bezeichner teil mit demselben Namen entspricht. Um Eigenschaftswerte aus der datenquellenspezifischen Eigenschaft der generischen Eigenschaft zu konvertieren, kann die Eigenschaft Konvertierungen, dargestellt als Konvertierung Schritte im Conversion-Element.
Außerdem können Eigenschaften einmal definiert werden und im XML-Code wiederverwendet werden. Dies wird erreicht, indem ein PropertyRef-Element, das Properties Gruppen element hinzufügen, um ein definiertes Element wieder zu verwenden oder indem ein PropertyListRef-Element hinzufügt, um eine Gruppe zuvor definierte Eigenschaften wiederzuverwenden.
Der folgende Code zeigt das Eigenschaftendefinitionen möglicherweise nach einem Element zugeordnete Typ ist.
<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-Attribut
Das Name-Attribut ist der Name des entsprechenden Objekttyps an.
underlyingType Attribut
Dieses Attribut gibt den Namen des zugrunde liegenden datenquellenspezifischen Typs an, von dem der zugeordnete Objekttyp Membern abgerufen werden soll.
DDEX-Datenobjekt-Objekt-Typ und MappedType-Funktionen
Datenobjektobjekt-typen haben vier primäre Funktionen. Sie beschreiben:
So erstellen Sie eine Enumeration von Visual Studio-Metadatenmodul Anforderung akzeptiert und diese an eine entsprechende Anforderung mithilfe der zugrunde liegenden Objekt-Auswahl OberflächeIVsDataObjectSelector im Microsoft.VisualStudio.Data.Services.SupportEntities konvertiert (Namespace).
Die zurückgegebenen Daten von der zugrunde liegenden Objekt-Auswahl Technologie hinsichtlich Eigenschaften und eines Bezeichners.
So erstellen Sie ein DSRef-Objekt mithilfe der IDSRefBuilder-Schnittstelle erstellt.
Der Typ, der Bezeichner und Eigenschaften in einer generischen Methode für den zugeordneten Typ, ggf. an.
Die vier Funktionen, die oben aufgeführten werden ausführlich in den folgenden Themen erläutert: