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


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

Сопоставление родовые понятия к частям и свойствам идентификатора сложнее, чем типы сопоставления, как описано в разделе coding the script сопоставление типов. Например, в дополнение к иметь б. И проблема, которую необходимо разрешить, как сделать с сопоставлением типов, существует добавленное дело сопоставления данных. Управление данными требуется сопоставление правильное преобразование данных в формат данные-источник-специфического ожидаемому родовыми терминах.

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

  • Сопоставление данных

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

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

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

  • б. 1 Сопоставление данных

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

Сопоставление данных

Сопоставление данных представляет сложности 2 основных типов. Во-первых, дело конфликтующие типы данных, как, например, когда значения Логический-типа true и false храните в виде строки. Во-вторых, проблема различных значений, представляющий одинаковые данные, как, например, при использовании значения индекса "0", "1" и "2" наряду с аналогичными строковыми значениями "НЕКЛЮЧЕВЫМИ", "ОДНОЗНАЧНО" и "PRIMARY".

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

  • ChangeType
    Для выполнения преобразования типа для текущего значения, вызовите метод платформы .NET Framework Convert.ChangeType. Он до поставщика данных, чтобы убедиться, что текущее значение типа, который может быть преобразован (то есть, он реализует IConvertible Interface интерфейс), и он содержит данные, которые могут быть преобразованы успешно.

  • Match
    Для анализа строковое представление текущего значения, можно использовать регулярное выражение платформы .NET. Это создает набор текущих значений равных значений каждой совпадающей группы (или если группы не указаны, то одного соответствующего значения). Если совпадения не найдены, то по умолчанию выбирается набор новых текущих значений, указанных поставщиком. Если поставщик знает, то всегда будет найдено совпадение значения по умолчанию не требуется.

  • Split
    Анализ строковое представление текущего значения в части отделился строкой, соответствует выражению, использующего регулярное выражение платформы .NET. Это создает набор текущих значений равных значений каждой части строки.

  • Replace
    Для анализа строковое представление текущего значения, а затем использовать шаблон замены для построения новое текущее значение на основе совпадающих значений группы, используйте регулярное выражение платформы .NET.

  • Format
    Чтобы создать строку на основе текущих значениях, используйте строку форматирования .NET. Набор текущих значений передается в качестве параметров формата в String.Format вызов функции, который позволяет ссылаться на набор текущих значений с помощью {0}" {1}и т д

  • Calculate
    Чтобы создать новое значение на основе текущих значениях, используйте ADO.NET выражение. Сначала строка передается до конца выражения String.Format с использованием текущих значений в качестве параметров формата, который делает возможной ссылаться на эти значения, используя {0}" {1}и т д Ссылаясь на значения, таким образом, необходимо использовать escape-символ, когда фигурные скобки в связанной строке.

  • CallMapper
    Этот элемент должен быть последним преобразованием в наборе шагов преобразования. Он определяет пользовательский метод, который вызывается для преобразования значения сопоставленного элемента, а также содержит тип, реализующий этот метод.

Для каждой из приведенных выше действий, один или несколько текущие значения могут содержать данные, которые действие может ссылаться. Начинается, когда преобразование первоначального текущее значение равно значению данные-источник-специфического. Так как инструкции преобразования продолжить, изменены эти текущие значения, заканчивающийся вверх в качестве значения преобразованное выпускными экзаменами.

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

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

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

Например, рассмотрим базу данных SQL Server, предоставляющей тип данных столбца как одно свойство, включая имя типа, длину, точность и масштаб. Если универсальный шаблон сопоставленный тип свойства DataType ожидается, что определенный формат этих сведений и SQL только происходит соответствовать этому формату сопоставление 1:1 и проблема (см. пример кода ниже). С другой стороны, если родовые сопоставляемые типы свойств тип данных, длина, точность и масштаб (-), далеко, то есть 1.И сопоставление-что, одно свойство данные-источник-специфического (DataType), представляющий несколько универсальных свойство понятие-в этом случае, тип данных, длина, точность и масштаб. См. пример кода ниже.

Предположим, что для другого примера случае базы данных, владеющего свойства и данные-источник-специфического IsPrimaryKey IsUniqueKey в качестве типа индекса. Предположим также, что существует универсальный шаблон концепцию свойства, IndexKeyType, использующий вектор бита, чтобы определить, является ли индекс ключа (a) и (b), если это так, то тип ключа. (В этом сценарии ключевой индекс может быть без key=0, unique key=1 и первичный key=2.) В этом сценарии доступны a в. 1 сопоставление, в котором несколько свойств данные-источник-специфического представлены один родовым понятием свойства (см. пример кода ниже).

Наконец, рассмотрим примере самого осложненного регистра, в котором свойства тип данных и DataTypeNumInfo данные-источник-специфического. Свойство DataType включает имя и свойства DataTypeNumInfo включает длину и точность и масштаб. Теперь предположим, что родовые свойства DataTypeName и DataTypeInfo. Свойство DataTypeName содержит только имя, а свойство DataTypeInfo включает длину, точность и масштаб. Это a б. И сопоставление, при котором несколько свойств данные-источник-специфического представлены несколькими родовыми свойствами.

Далее приводится сводка и примеры кода для каждого сценария идентификатора и сопоставления свойств.

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

Самое простое однозначное сопоставление регистра и требует меньшего работы. Поставщик данных имеет один часть или свойство идентификатора данные-источник-специфического, сопоставить с одной родовым части идентификатора или понятию свойства, например в следующем примере:

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

В этом примере свойство данные-источник-специфического, ObjectType, может содержать значения строки "2" и "ПОЛЬЗОВАТЕЛЬ СИСТЕМЫ". Эти сопоставления сведения в родовому сопоставленному типу IsSystemObject, который определен как значение типа boolean. Таким образом, шаг преобразования вычисляет логическое выражение на основе строковом значении данные-источник-специфического.

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

1: И вариант несколько более осложнено. Поставщик данных имеет один часть или свойство идентификатора данные-источник-специфического, сопоставить к нескольким частям родовым или свойствам идентификатора. Успешно, поставщик данных применяет сопоставление путем указания нескольких родовые свойства с одинаковым значением underlyingMember, как показано в следующем коде:

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

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

Для получения значения для универсального сопоставленного свойства DataType, поставщик должен извлечь первая часть значения данные-источник-специфического использование простого регулярного выражения то машинные слова совпадений в открытый брекету.

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

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

б. 1 Сопоставление данных

Это случай требует немного больше работы, чем 1: И сопоставление. В этом сценарии поставщик данных имеет несколько частей или свойства идентификатора данные-источник-специфического, сопоставить с одной родовым части идентификатора или понятию свойства. Поставщики данных применяют это сопоставление с указанием разделенной запятыми строки значение атрибута underlyingMember элемента свойства, содержащий все свойства данные-источник-специфического, сопоставить с родовому свойству, как показано в следующем примере кода:

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

В этом примере свойства IsUniqueKey данные-источник-специфического и IsPrimaryKey true OR false основан ли индекс ключа, и если возвращаются, то каков тип. Универсальный шаблон свойство IndexKeyType строку, равную NONE, UNIQUE или ПЕРВИЧНЫХ.

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

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

Это случай представляет комбинацию 1: И и б. 1 сопоставление. Поставщик данных имеет несколько частей или свойства идентификатора данные-источник-специфического, сопоставить к нескольким частям родовым или свойствам идентификатора. Поставщики данных применяют это сопоставление путем указания нескольких свойств источника данных, родовым сопоставить нескольким свойствам, как показано в следующем примере:

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

В этом примере свойства DataType данные-источник-специфического и DataTypeNumInfo предоставляют тип данных с длиной, точностью и масштабом. Универсальный шаблон свойство DataTypeName содержит только имя и DataTypeInfo содержит длину, точность и масштаб.

Для получения значения для универсального свойства DataTypeName, поставщик должен извлечь первая часть свойства DataType данные-источник-специфического использование простого регулярного выражения то машинные слова совпадений значение открытого брекета.

Для получения значения для универсального свойства DataTypeInfo поставщик данных должен извлечь вторая часть свойства DataType данные-источник-специфического и 2 частей свойства DataTypeNumInfo данные-источник-специфического, а затем вставляет данные в правильном формате. Для этого сначала сцепления оба свойства в одну строку и затем использовать регулярное выражение, чтобы соответствовать длине данных, точности и масштаба. Наконец, поставщик данных выполняет операцию замены для создания новой одна строка с этими сведениями в правом формате.

См. также

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

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

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