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


Элемент QueryView (EntitySetMapping)

В модели Entity Data Model (EDM) элемент QueryView в EntitySetMapping определяет сопоставление только для чтения между сущностью в концептуальной модели и сущностью в модели хранения. Такое сопоставление представления запроса определяется с помощью запроса Entity SQL, выполняемого применительно к модели хранения, а результирующий набор выражается в терминах сущности концептуальной модели. Представления запросов доступны только для чтения, поэтому для обновления типов, которые определены представлениями запросов, не могут применяться стандартные команды обновления. Представления запросов доступны только для чтения, поэтому для обновления типов, которые определены представлениями запросов, не могут применяться стандартные команды обновления. Дополнительные сведения см. в разделе Как сопоставить функции изменения с хранимыми процедурами.

Представления запросов можно определять для реализации следующих сценариев.

  • Определение сущности в концептуальной модели, не включающей все свойства сущности в модели хранения. Сюда входят свойства, не имеющие значений по умолчанию и не поддерживающие значения null.

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

  • Определение сопоставления, в котором условия, используемые для секционирования сущностей в концептуальной модели, не базируются на равенстве. При определении условного сопоставления с помощью элемента Condition указанное условие должно быть равным заданному значению. Дополнительные сведения см. в разделе Элемент Condition (MappingFragment).

  • Сопоставление одного столбца в модели хранения с несколькими типами в концептуальной модели.

  • Сопоставление нескольких типов с одной и той же таблицей.

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

  • Применение пользовательской бизнес-логики для задания значений свойств в концептуальной модели. Так, строковое значение «T» в источнике данных можно сопоставить с логическим значением true в концептуальной модели.

  • Определение условных фильтров для результатов запроса.

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

При определении представлений запросов для сущностей необходимо принимать во внимание следующие соображения.

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

  • В случае определения типа сущности через представление запроса необходимо также определять все связанные сущности через представления запросов.

  • При сопоставлении ассоциации «многие ко многим» с сущностью модели хранения, которая представляет таблицу связей, в реляционной схеме необходимо определять элемент QueryView в элементе AssociationSetMapping для данной таблицы связей. Дополнительные сведения см. в разделе Элемент QueryView (AssociationSetMapping).

  • Представления запросов должны быть определены для всех типов в иерархии типов. Это можно сделать следующими способами:

    • с помощью одного элемента QueryView, который определяет один запрос Entity SQL, возвращающий объединение всех типов сущностей данной иерархии;

    • с помощью одного элемента QueryView, который указывает один запрос Entity SQL, использующий оператор CASE для возвращения конкретного типа сущности в иерархии на основе заданного условия;

    • с помощью дополнительного элемента QueryView для конкретного типа в иерархии (в данном случае нужно использовать атрибут TypeName элемента QueryView, чтобы указать тип сущности для каждого представления);

  • когда представление запроса определено, указание атрибута StorageSetName элемента EntitySetMapping становится невозможным;

  • когда представление запроса определено, элемент EntitySetMapping не может также содержать сопоставления Property.

В следующем примере определяется представление запроса для типа сущности Product в модели AdventureWorks Sales.

<EntitySetMapping Name="Product">
  <QueryView>
      SELECT VALUE AdventureWorksModel.Product(P.ProductID,
      P.Name, P.ProductNumber, P.Color, P.ListPrice, P.Size, P.Weight,
      P.Style)
      FROM Person.Product as P
  </QueryView>
</EntitySetMapping>

Поскольку данный запрос возвращает только подмножество членов типа Product в модели хранения, тип Product в модели AdventureWorks Sales был изменен на базе этих сопоставлений следующим образом:

  <EntityType Name="Product">
  <Key>
    <PropertyRef Name="ProductID" />
  </Key>
  <Property Name="ProductID" Type="Int32" Nullable="false" />
  <Property Name="Name" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" />
  <Property Name="ProductNumber" Type="String" Nullable="false" MaxLength="25" Unicode="true" FixedLength="false" />
  <Property Name="Color" Type="String" MaxLength="15" Unicode="true" FixedLength="false" />
  <Property Name="ListPrice" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
  <Property Name="Size" Type="String" MaxLength="5" Unicode="true" FixedLength="false" />
  <Property Name="Weight" Type="Decimal" Precision="8" Scale="2" />
  <Property Name="Style" Type="String" MaxLength="2" Unicode="true" FixedLength="true" />
</EntityType>

Тип Product в модели хранения образца модели AdventureWorks Sales не был изменен в данном примере.

См. также

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

Сценарии сопоставления модели EDM (сценарии приложений)
Элемент EntitySetMapping (язык MSL)