Работа с данными сущностей

Платформа Entity Framework компилирует метаданные концептуальной модели и модели хранения вместе с заданными для них сопоставлениями, создавая двунаправленные пары инструкций Entity SQL , называемые клиентскими представлениями. Эти представления управляют обработкой запросов и обновлений в среде выполнения. Компилятор сопоставлений может быть вызван для формирования представлений как во время разработки, так и во время выполнения, при выполнении первого запроса к концептуальной модели.

Платформа Entity Framework объединяет работу отдельных поставщиков данных ADO.NET и обеспечивает передачу объекта EntityConnection базовому поставщику данных и источнику данных.

Во время выполнения запрос проходит синтаксический анализ и преобразуется в каноническое дерево команд, которое является представлением запроса в объектной модели. Канонические деревья команд представляют операции выбора, обновления, вставки и удаления. Вся дальнейшая обработка выполняется над деревом команд, которое является средством взаимодействия между поставщиком System.Data.EntityClient и базовым поставщиком данных .NET Framework, например System.Data.SqlClient.

На следующей схеме показана архитектура доступа к данным в платформе Entity Framework.

Схема архитектуры Entity Framework

Запросы к объектам

Средства ADO.NET EDM формируют класс, производный от ObjectContext, который представляет контейнер сущностей, определенный в концептуальной модели. Класс ObjectContext поддерживает запросы к концептуальной модели и обеспечивает создание, обновление и удаление объектов сущностей, а также получение сущностей в виде объектов. Платформа Entity Framework поддерживает запросы объектов к концептуальной модели. Запросы могут создаваться с использованием языка Entity SQL , технологии LINQ и методов построителя запросов объектов.

В концептуальной модели сущности связаны друг с другом сопоставлениями. На уровне объектов эти сопоставления представляются свойствами, обеспечивающими доступ к коллекциям связанных объектов на основе ссылок на сущности. Например, в модели School свойство Department.Course возвращает коллекцию сущностей, содержащую объекты Course, согласно сопоставлению между Course и Department. Если свойство LazyLoadingEnabled класса ObjectContext установлено в значение false, то ссылочные объекты не загружаются автоматически и для загрузки данных связанных объектов в контекст объекта необходимо вызвать метод Load, передав ему ссылку на сущность.

Bb399760.note(ru-ru,VS.100).gifПримечание
При использовании конструктора EDM для создания кода уровня объектов свойство LazyLoadingEnabled класса ObjectContext по умолчанию устанавливается в значение true.

Можно также указать путь запроса, который определяет, какие связанные объекты следует загружать вместе с возвращаемыми. Дополнительные сведения см. в разделе Выполнение запроса к концептуальной модели (платформа Entity Framework).

В следующем примере из краткого руководства показан запрос, который во время выполнения возвращает все объекты Department. Определение пути запроса гарантирует, что также будут возвращаться объекты Course, связанные с объектами Department. В Entity SQL предложение ORDER BY упорядочивает возвращаемые объекты по Name.

' Define a query that returns all Department objects
' and related Course objects, ordered by name.
Dim departmentQuery As ObjectQuery(Of Department) = _
    From d In schoolContext.Departments.Include("Courses") _
    Order By d.Name _
    Select d
// Define a query that returns all Department  
// objects and course objects, ordered by name.
var departmentQuery = from d in schoolContext.Departments.Include("Courses")
                      orderby d.Name
                      select d;

Дополнительные сведения см. в разделе Выполнение запроса к концептуальной модели (платформа Entity Framework).

Можно определить набор моделей, использующих хранимые процедуры для выполнения запросов на источнике данных. Результирующий набор такой хранимой процедуры сопоставляется с сущностями концептуальной модели. Дополнительные сведения см. в разделе How to: Import a Stored Procedure.

Работа с объектами

Объект в контексте объекта представляет данные, находящиеся в источнике данных, согласно типу сущности. В контексте объекта можно создавать, изменять и удалять объекты. Контекст объекта управляет идентификаторами и связями между объектами. Кроме того, можно выполнять сериализацию объектов и привязывать их к элементам управления. Дополнительные сведения см. в разделе Работа с объектами (платформа Entity Framework).

В следующем примере из краткого руководства возвращается коллекция объектов Course, связанных с объектом Department, а затем эта коллекция привязывается к элементу управления DataGridView.

' Get the object for the selected department.
Dim department As Department = _
    CType(Me.departmentList.SelectedItem, Department)

' Bind the grid view to the collection of Course objects 
' that are related to the selected Department object.
courseGridView.DataSource = department.Courses
//Get the object for the selected department.
Department department = (Department)this.departmentList.SelectedItem;

//Bind the grid view to the collection of Course objects
// that are related to the selected Department object.
courseGridView.DataSource = department.Courses;

Платформа Entity Framework отслеживает изменения данных сущностей и позволяет сохранять их в источнике данных. В следующем примере из краткого руководства изменения в контексте объекта записываются в базу данных.

' Save object changes to the database, 
' display a message, and refresh the form.
schoolContext.SaveChanges()

Дополнительные сведения см. в разделе Создание, добавление, изменение и удаление объектов (платформа Entity Framework).

Можно определить концептуальную модель, которая производит вставку, обновление и удаление данных в источнике данных с помощью хранимых процедур. Эти хранимые процедуры сопоставляются с сущностями в концептуальной модели. Дополнительные сведения см. в разделе Walkthrough: Mapping an Entity to Stored Procedures.

См. также

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

Работа с объектами (платформа Entity Framework)
Запросы в LINQ to Entities