Как добавлять определяющий запрос (платформа Entity Framework)

Как добавлять определяющий запрос (платформа Entity Framework)

В этом разделе описан процесс добавления определяющего запроса и соответствующего концептуального типа сущности в EDMX-файл. Определяющий запрос позволяет выполнить инструкцию SQL, указанную в элементе DefiningQuery EDMX-файла. Дополнительные сведения см. в разделе DefiningQuery Element (EntitiContainer SSDL). Определяющие запросы часто применяются для реализации функциональности, аналогичной той, которую обеспечивают представления базы данных, хотя определяются в EDMX-файле, а не в базе данных. Концептуальный тип сущности используется для отображения данных с помощью определения запроса на концептуальном уровне.

Параметризованные запросы не могут выполняться как определяющие запросы. По умолчанию данные, отображенные с помощью определяющего запроса, доступны только для чтения. Однако их обновление возможно через сопоставление функций вставки, обновления и удаления типа сущности, который отображает данные в хранимых процедурах. Дополнительные сведения см. в разделах Как сопоставить функции изменения с хранимыми процедурами (средства работы с моделью EDM) и Пошаговое руководство по сопоставлению сущностей с хранимыми процедурами (средства модели EDM).

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

Следующие процедуры предполагают наличие EDMX-файла, открытого в редакторе XML в Visual Studio.

Добавление определяющего запроса

Добавление определяющего запроса

Добавьте элемент EntitySet в раздел SSDL EDMX-файла. Укажите только атрибуты Name и EntityType для элемента EntitySet. Дополнительные сведения см. в разделе EntitySet Element (EntityContainer SSDL).

Добавьте элемент DefiningQuery во вновь добавленный элемент EntitySet. Укажите инструкцию SQL для выполнения в теле элемента DefiningQuery. Дополнительные сведения см. в разделе DefiningQuery Element (EntitiContainer SSDL).

Добавьте элемент EntityType в раздел SSDL EDMX-файла. Этот элемент EntityType должен описывать столбцы, возвращаемые инструкцией SQL в элементе DefiningQuery. Дополнительные сведения см. в разделе EntityType Element (SSDL).

Добавление типа сущности в концептуальную модель

Добавление концептуального типа сущности

Добавьте элемент EntitySet в раздел CSDL EDMX-файла. Дополнительные сведения см. в разделе EntitySet Element (EntityContainer CSDL).

Добавьте элемент EntityType в раздел CSDL EDMX-файла. Атрибут Name должен иметь то же значение, что и атрибут Name элемента EntitySet в предыдущем шаге. Свойства типа сущности должны сопоставляться данным, возвращаемым инструкцией SQL, указанной в элементе DefiningQuery вышеописанной процедуры. Дополнительные сведения см. в разделе EntityType Element (CSDL).

Сопоставление концептуального типа сущности и типа сущности хранилища.

Сопоставление концептуального типа сущности и типа сущности хранилища
  1. Добавьте элемент EntitySetMapping в раздел сопоставления EDMX-файла, в котором содержится сопоставление концептуальных сущностей и сущностей хранения в двух предыдущих процедурах. Дополнительные сведения см. в разделах EntitySetMapping Element (MSL) и Mapping a Conceptual Model to a Storage Schema.

Пример

Следующий пример демонстрирует процесс добавления определяющего запроса в файл School.edmx для отображения сведений об оценках учащихся с типом сущности GradeReport. Чтобы создать файл School.edmx, выполните шаги, приведенные в разделе Создание модели EDM «School» Entity Framework Quickstart.

Чтобы добавить определяющий запрос, необходимо сначала добавить следующий элемент EntitySet (содержащий элемент DefiningQuery) в раздел SSDL EDMX-файла. Обратите внимание на следующие моменты.

Указаны только атрибуты Name и EntityType элемента EntitySet.

Полное имя типа сущности используется в атрибуте EntityType.

Инструкция SQL для выполнения указана в элементе DefiningQuery.

Далее добавьте следующий элемент EntityType в раздел SSDL EDMX. -файла. Обратите внимание на следующие моменты.

Значение атрибута Name соответствует значению атрибута EntityType в вышеописанном элементе EntitySet, несмотря на то что полное имя типа сущности используется в атрибуте EntityType.

Имена свойств соответствуют именам столбцов, возвращаемых инструкцией SQL в элементе DefiningQuery (см. выше).

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

Чтобы добавить тип сущности в концептуальную модель, необходимо сначала добавить следующий элемент EntitySet в раздел CSDL EDMX-файла. Заметьте, что полное имя типа сущности используется в атрибуте EntityType.

Далее добавьте следующий элемент EntityType в CSDL раздел EDMX-файла. Обратите внимание на следующие моменты.

Значение атрибута Name соответствует значению атрибута EntityType в вышеописанном элементе EntitySet, несмотря на то что полное имя типа сущности используется в атрибуте EntityType.

Имена свойств соответствуют именам столбцов, возвращаемых инструкцией SQL в элементе DefiningQuery (см. выше).

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

Чтобы сопоставить концептуальный тип сущности с сущностью хранилища, необходимо добавить следующий элемент EntitySetMapping в раздел сопоставления EDMX-файла.

Тип сущности GradeReport будет добавлен в модель School. Обратите внимание, что данные, отображаемые через тип сущности GradeReport, доступны только для чтения.

📎📎📎📎📎📎📎📎📎📎