Freigeben über


Bezeichner-und Eigenschaft-zuordnen

Generische Konzepte zu den Bezeichner aufteilen und Eigenschaften zuzuordnen ist komplizierter als Typen von Zuordnungen (siehe Typzuordnungerläutert. Zum Beispiel zusätzlich zum Verwenden des b: g-Problem zu lösen, wie Sie mit Typzuordnung vorhanden ist, der weitere Daten des Stoff zuordnens. Das Verwalten von Daten benötigt die Zuordnung der richtigen datenquellenspezifischen Konvertierung der Daten in das Format, das von allgemeine Konzepte erwartet wird.

In den folgenden Abschnitten Diesbezüglich und beraten über wir zuerst die schwierigere Ursache von Daten zuordnend und weisen dann diese Erläuterung zu den verschiedenen Arten von b: g- Problem:

  • Bezugspunkt-zuordnen

  • Bezeichner-und Eigenschaft-zuordnen

  • 1:1 Bezugspunkt-zuordnen

  • 1: g-Bezugspunkt-zuordnen

  • b: 1 Bezugspunkt-zuordnen

  • b: g-Bezugspunkt-zuordnen

Bezugspunkt-zuordnen

Das Zuordnen von Daten aus Schwierigkeiten führt zwei wesentlichen Typen dar. Es gibt jedoch den Stoff von in Konflikt stehenden Datentypen wie z. B. wenn Wert-TYPE-Werte true und false als Zeichenfolgen gespeichert werden. Zweitens wird das Problem der unterschiedlichen Werte zurück, die die gleichen Daten darstellen, z. B. wenn Sie die Zeichenfolgen indexwerte „0 ", „1 " und „2 " neben „Zeichenfolgenwerten analogen NICHTSCHLÜSSEL“, „UNIQUE“ und „PRIMARY“.

Um die größte Flexibilität bereitstellen, kann ein Datenanbieter die Konvertierung von Testschritten angeben, wenn sie folgen, einen datenquellenspezifischen Wert mit einem Wert konvertieren, der mit einem generischen zugeordneten Typ überein. Jeder Schritt Konvertierung implementiert möglicherweise eine der folgenden Aktionen aus:

  • ChangeType
    Um eine Typkonvertierung auf dem aktuellen Wert auszuführen, rufen Sie die .NET Framework-Methode Convert.ChangeTypean. Er ist, Datenanbieter, um sicherzustellen, dass der aktuelle Wert von einem Typ ist, der konvertiert werden kann (das heißt IConvertible Interface die er implementiert diese Schnittstelle), und dass diese Daten enthält, die erfolgreich konvertiert werden können.

  • Match
    Um eine Zeichenfolgendarstellung des aktuellen Werts zu analysieren, verwenden Sie einen normalen. NET-Ausdruck. Dies erzeugt eine Reihe von aktuelle Werte mit den Werten der einzelnen übereinstimmenden Gruppe (oder, wenn keine Gruppen angegeben werden, die einzige übereinstimmende Wert). Wenn keine Übereinstimmung gefunden wird, wird ein Standardsatz neue aktuelle Werte, die vom Anbieter angegebenen ausgewählt. Wenn der Anbieter weiß, wird stets eine Übereinstimmung auftritt, muss die Standardwerte nicht angegeben werden.

  • Split
    So erstellen Sie eine Zeichenfolgendarstellung des aktuellen Werts in Teile getrennt analysieren durch eine Zeichenfolge, die den Ausdruck übereinstimmt. NET-Ausdruck mithilfe regulärer. Dies erzeugt eine Reihe von aktuelle Werte mit den Werten jedes Teils der Zeichenfolge.

  • Replace
    Um eine Zeichenfolgendarstellung des aktuellen Werts zu analysieren und ein Ersetzungsmuster anschließend mit um einen neuen aktuellen Wert auf Grundlage von übereinstimmenden Gruppen von Werten zu erstellen, verwenden Sie einen normalen. NET-Ausdruck.

  • Format
    Um aktuelle Werte auf Grundlage einer Zeichenfolge zu erstellen, verwenden Sie eine .NET-Formatzeichenfolge. Der Satz von aktuellen Werte werden als Stilparameter zu String.Format-Funktionsaufruf, der es möglich, den aktuellen Satz von Werten mithilfe {0}, {1}verwiesen wird, usw. zu übergeben.

  • Calculate
    Um einen neuen Wert anhand von den aktuellen Werten zu erstellen, verwenden Sie einen ADO.NET Ausdruck. Die Ausdruckszeichenfolge wird erst nach String.Format mit dem Satz der aktuellen Werte als Format parametern, der es möglich, diese Werte mithilfe {0}, {1}verwiesen wird, usw. zu übergeben. Das Verweisen auf diese Weise muss von Werten wie ein Escapezeichen, wenn sie geschweifte Klammern in der referenzierten Zeichenfolge gibt.

  • CallMapper
    Dieses Element muss die letzte Konvertierung im Satz der Konvertierung schritten sein. Es gibt eine benutzerdefinierte Methode, die für das Konvertieren des Werts des zugeordneten Member aufgerufen werden soll, und enthält auch den Typ, der diese Methode implementiert.

Für jede der obigen Aktionen, enthalten eine oder mehrere aktuellen Werte, die die Aktion kann Daten verweisen kann. Wenn eine Konvertierung beginnt, ist ein ursprünglicher aktueller Wert gleich dem datenquellenspezifischen Wert. Während die Konvertierung Bereitstellungsschritte fortsetzen, werden diese aktuellen Werte geändert und höher als letzte konvertierter Wert enden.

Diese Konvertierung Schritt Architektur ermöglicht Datenanbietern, um alle datenquellenspezifischen Daten in den richtigen Typ und das Format für den generischen Typ zugeordneten praktisch zu bearbeiten, den es darstellt.

Bezeichner-und Eigenschaft-zuordnen

Das Problem für Bezeichner b: g Teile und - eigenschaften tritt auf, weil Sie Daten aufweisen können, die von anderen Daten erstellt oder analysiert wird. Beispielsweise kann ein Spalten des Datentyps von einem Typnamen, einer Länge von einer Genauigkeit und einer Skala bestehen. Einige, alle oder keine von diesen Daten konnten Teil einer einzelnen Eigenschaft sein. Das b: g Problem tritt auf, wenn die generischen Bezeichner oder die Eigenschaften nicht gleichwertig gepackt werden.

Betrachten Sie als Beispiel eine SQL Server-Datenbank, die den Datentyp einer Spalte als einzelne Eigenschaft verfügbar macht, die den Typnamen, die Länge, die Genauigkeit und die Dezimalstellen umgibt. Wenn ein generischer zugeordneter Eigenschaftentyp DataType erwartet, dass ein bestimmtes Format dieser Informationen und SQL dieses Format, um nur der Fall, ist die Zuordnung 1:1 und es gibt kein Problem, Codebeispiel werden (siehe unten). Wenn es sich um generische zugeordnete Eigenschaftentypen DataType, Länge, Genauigkeit und Dezimalstellen (gibt die weit entfernte wahrscheinlicher ist), verfügen Sie über 1:g , Zuordnung-dass ist, eine einzelne datenquellenspezifische Eigenschaft DataType () mehr als eine generische Eigenschaft Konzept-in diesem Fall darstellt, DataType, Länge, Genauigkeit und Dezimalstellen. Beispielcode finden Sie weiter unten.

Nehmen Sie ein weiteres Beispiel für den Fall von einer Datenbank, die Eigenschaften IsUniqueKey datenquellenspezifische IsPrimaryKey verfügt und als Index ein. Nehmen wir außerdem an, dass es sich um ein generisches Eigenschaft Konzept, IndexKeyType Bit, das einen vektor (A) verwendet, um anzugeben, ob der Index ein Schlüssel ist und (b) Wenn dies der Fall ist, gibt die Art des Schlüssels. (In diesem Szenario ist der Schlüssel key=0, kann kein eindeutiger Index key=1 und primäres key=2). In einem solchen Szenario haben wir b: 1 Zuordnung, in der mehrere datenquellenspezifische Eigenschaften durch ein einzelnes generisches Eigenschaft Konzept dargestellt werden (siehe Codebeispiel unten).

Schließlich sollten Sie ein Beispiel für den schwierigsten Groß-/Kleinschreibung, in dem sie datenquellenspezifische Eigenschaft DataType und DataTypeNumInfo vorhanden ist. Die DataType-Eigenschaft enthält einen Namen und eine Länge und die Genauigkeit und Dezimalstellen DataTypeNumInfo-Eigenschaft enthält. Nehmen Sie nun an, dass es sich um allgemeine Eigenschaften und DataTypeName DataTypeInfo vorhanden ist. Die DataTypeName-Eigenschaft enthält nur einen Namen, und die DataTypeInfo-Eigenschaft schließt Länge, Genauigkeit und Dezimalstellen. Dies ist zuordnendes b: g , worin mehrere datenquellenspezifische mehrere generische Eigenschaften durch Eigenschaften dargestellt werden.

Im Folgenden finden Sie Codebeispiele und Zusammenfassungen der einzelnen Szenarien Zuordnungen Bezeichner- und ein Property.

1:1 Bezugspunkt-zuordnen

Die Zuordnung ist der einfachste Fall 1:1 und erfordert genügend Arbeit. Ein Datenanbieter verfügt über einen einzelnen datenquellenspezifischen Bezeichner beteiligt oder - Eigenschaft, die auf ein einzelnes generischen Bezeichner oder ein Konzept der Eigenschaft wie im folgenden Beispiel gezeigt:

<Type name="Table" preferredOrdering="Database, Schema, Name">
...
    <Properties>
...
        <Property name="ObjectType" type="System.String" />
    </Properties>
</Type>

<MappedType name="Table" underlyingType="Table">
...
    <Properties>
        <Property name="IsSystemObject" underlyingMember="ObjectType">
            <Conversion>
                <Calculate expr="IIF({0}=SYSTEM,true,false") exprType="System.Boolean" />
            </Conversion>
        </Property>
   </Properties>
</MappedType>

In diesem Beispiel kann eine Eigenschaft, datenquellenspezifische ObjectType, zwei Zeichenfolgenwerten, die „“ und „SYSTEM“ enthalten. Wird dieser Informationen an den generischen IsSystemObject zugeordneten Typ, der als boolescher Wert definiert ist. Daher wird ein Konvertierung des Lernprogramms einen booleschen Ausdruck anhand des datenquellenspezifischen Zeichenfolgenwert.

1: g-Bezugspunkt-zuordnen

Das 1: g-Fall ist etwas komplizierter. Ein Datenanbieter verfügt über einen einzelnen datenquellenspezifischen Bezeichner beteiligt oder eine Eigenschaft, die an mehreren generischen Bezeichner aufteilen oder - Eigenschaften zugeordnet ist. Um zu folgen, wendet der Datenanbieter eine Zuordnung indem mehrere generische Eigenschaften mit demselben Wert underlyingMember, wie im folgenden Code dargestellt:

<Type name="Column" preferredOrdering="Database, Schema, Table, Id">
...
    <Properties>
...
        <Property name="DataType" type="System.String" />
    </Properties>
</Type>

<MappedType name="TableColumn" underlyingType="Column">
...
    <Properties>
        <Property name="DataType" underlyingMember="DataType">
            <Conversion>
                <Match regex="^[^(]+" />
            </Conversion>
        </Property>
        <Property name="Length" underlyingMember="DataType">
            <Conversion>
                <Match regex="(?<=^CHAR\(|^VARCHAR\()\d+">
                    <Defaults>
                        <Default value="0" />
                    </Defaults>
                </Match>
                <ChangeType type="System.Int32" />
            </Conversion>
        </Property>
        <Property name="Precision" underlyingMember="DataType">
            <Conversion>
                <Match regex="(?<=^NUMERIC\()\d+">
                    <Defaults>
                        <Default value="0" />
                    </Defaults>
                </Match>
                <ChangeType type="System.Int32" />
            </Conversion>
        </Property>
   </Properties>
</MappedType>

In diesem Beispiel enthält eine datenquellenspezifische Eigenschaft DataType, Informationen für drei allgemeine Eigenschaften. Er beginnt mit dem Datentypnamen und dann in eckige Klammern enthält Informationen zur Länge für Zeichentypen und dann über die Genauigkeit für numerische Typ.

Um einen Wert für die generische zugeordnete Eigenschaft DataType abzurufen, muss der Anbieter den ersten Teil des Werts mithilfe eines datenquellenspezifischen diesem einfachen regulären Ausdrucks zu beachten wörter Extrahieren einer offenen Klammern.

Um einen Wert für die generische zugeordnete Eigenschaft Länge abzurufen, muss der Anbieter die erste Zahl in Klammern extrahieren, aber nur noch ein Zeichen des Datentyps ist. Andernfalls ist der Wert null. Der angegebene reguläre Ausdruck geschieht gemeinsam mit dem angegebenen Standardwert. Eine zweite Aktion konvertiert die extrahierte Zeichenfolge in den richtigen Typ, der das generische Eigenschaft Konzept erwartet wird.

Um einen Wert für die generische zugeordnete Eigenschaft Genauigkeit abzurufen, muss der Anbieter die erste Zahl in Klammern extrahieren, aber nur noch ein numerischer Datentyp ist. Andernfalls ist der Wert null. Der angegebene reguläre Ausdruck geschieht gemeinsam mit dem angegebenen Standardwert. Eine zweite Aktion konvertiert die extrahierte Zeichenfolge in den richtigen Typ, der das generische Eigenschaft Konzept erwartet wird.

b: 1 Bezugspunkt-zuordnen

In diesem Fall muss ein wenig mehr Arbeit als 1: g- Zuordnung. In diesem Szenario ist ein Datenanbieter mehrere Teile oder - eigenschaften datenquellenspezifische Bezeichner für ein einzelnes generischen Bezeichner oder ein Konzept der Eigenschaft zuweisen. Datenanbieter gelten diese Zuordnung, indem sie einen durch Trennzeichen getrennten Wert das underlyingMember Attribut des Eigenschaftenelements angeben, das alle datenquellenspezifischen Eigenschaften enthält, die zur generischen Eigenschaft zuordnen, wie im folgenden Codebeispiel veranschaulicht:

<Type name="Index" preferredOrdering="Database, Schema, Table, Name">
...
    <Properties>
        <Property name="IsUniqueKey" type="System.Boolean" />
        <Property name="IsPrimaryKey" type="System.Boolean" />
...
    </Properties>
</Type>

<MappedType name="TableIndex" underlyingType="Index">
...
    <Properties>
        <Property name="DataType" underlyingMember="DataType">
            <Conversion>
                <Match regex="^[^(]+" />
            </Conversion>
        </Property>
        <Property name="IndexKeyType" underlyingMember="IsUniqueKey,IsPrimaryKey">
           <Conversion>
               <Calculate expr="IIF({0}=true,
                                IIF({1}=true,PRIMARY,UNIQUE),
                                NONE)"
                          type="System.String" />
           </Conversion>
        </Property>
        <Property name="Precision" underlyingMember="DataType">
            <Conversion>
                <Match regex="(?<=^NUMERIC\()\d+">
                    <Defaults>
                        <Default value="0" />
                    </Defaults>
                </Match>
                <ChangeType type="System.Int32" />
            </Conversion>
        </Property>
   </Properties>
</MappedType>

In diesem Beispiel werden IsUniqueKey datenquellenspezifische Eigenschaften und true oder false IsPrimaryKey abhängig davon, ob ein Index ein Schlüssel ist, und wenn ja, welcher Typ. Die generische Eigenschaft IndexKeyType ist eine Zeichenfolge, die gleich KEINE oder UNIQUE, PRIMARY.

Beide datenquellenspezifischen Eigenschaften sind erforderlich, um die vollständige Informationen für die generische Eigenschaft bereitgestellt. Daher muss der Anbieter den Inhalt von mehreren Eigenschaften in einer zusammenführen und eine Konvertierung erfolgen muss.

b: g-Bezugspunkt-zuordnen

In diesem Fall stellt eine Kombination von 1 dar: g und b: 1 Zuordnung. Ein Datenanbieter enthält mehrere Teile datenquellenspezifische Bezeichner oder Eigenschaften verfügbar, die an mehreren generischen Bezeichner aufteilen oder - Eigenschaften zuordnen. Datenanbieter weisen diese Zuordnung, indem mehrere Datenquelleneigenschaften, die an mehreren allgemeinen Eigenschaften zuordnen, wie im folgenden Beispiel gezeigt wird:

<Type name="Column" preferredOrdering="Database, Schema, Table, Id">
...
    <Properties>
        <Property name="DataType" type="System.String" />
        <Property name="DataTypeNumInfo" type="System.String" />
...
    </Properties>
</Type>

<MappedType name="TableColumn" underlyingType="Column">
...
    <Properties>
        <Property name="DataTypeName" underlyingMember="DataType">
            <Conversion>
                <Match regex="^[^(]+" />
            </Conversion>
        </Property>
        <Property name="DataTypeInfo" underlyingMember="DataType,DataTypeNumInfo">
            <Conversion>
                <Format string="{0}#{1}" />
                <Replace regex="\((\d+)\)#(\d+),(\d+)" pattern="$1,$2,$3" />
            </Conversion>
        </Property>
...
   </Properties>
</MappedType>

In diesem Beispiel bereitgestellten datenquellenspezifische Eigenschaft DataType und DataTypeNumInfo einen Datentyp mit der Länge, Genauigkeit und Dezimalstellen. Die generische DataTypeName Eigenschaft enthält nur den Namen, und DataTypeInfo Länge, Genauigkeit und Dezimalstellen enthält.

Um einen Wert für die generische Eigenschaft DataTypeName abzurufen, muss der Anbieter den ersten Teil der datenquellenspezifischen Eigenschaft DataType mit einem einfachen regulären dieses Ausdrucks Übereinstimmungen extrahieren wörter bis zu einer offenen Klammern.

Um einen Wert für die generische Eigenschaft DataTypeInfo abzurufen, muss der Datenanbieter den zweiten Teil der datenquellenspezifischen Eigenschaft DataType und die beiden Teile der datenquellenspezifischen Eigenschaft DataTypeNumInfo extrahieren und fügt diese anschließend in das richtige Format. Dies geschieht, indem zuerst beide Eigenschaften in eine einzelne Zeichenfolge und mithilfe eines regulären Ausdrucks die Länge verkettet, um die Genauigkeit und die Dezimalstellen Informationen dann entspricht. Schließlich führt der Datenanbieter einem Ersetzungsvorgang aus, um eine neue einzelne Zeichenfolge mit diesen Informationen im rechten Format zu erstellen.

Siehe auch

Konzepte

Zuordnungs-Objekttyp-Bezeichner und Eigenschaften mit generischen Typen

Typzuordnung