Работа с данными сущностей
Платформа Entity Framework компилирует набор концептуальных схем и схем хранения вместе с заданными для них сопоставлениями, создавая двунаправленные пары инструкций Entity SQL, называемые клиентскими представлениями. Эти представления управляют обработкой запросов и обновлений в среде выполнения. Создающий представления компилятор сопоставлений может быть вызван как во время разработки, так и во время выполнения, в момент выполнения первого запроса к схеме модели Entity Data Model.
Платформа Entity Framework строится на основе поставщиков данных ADO.NET, специфичных для типа хранилища. Для этого базовому поставщику данных и реляционной базе данных передается объект EntityConnection.
Во время выполнения запрос проходит синтаксический анализ и преобразуется в каноническое дерево команд, которое является представлением запроса в модели объектов. Канонические деревья команд представляют операции выбора, обновления, вставки и удаления. Вся дальнейшая обработка выполняется над деревом команд, которое является средством взаимодействия между поставщиком System.Data.EntityClient и базовым поставщиком данных .NET Framework, например System.Data.SqlClient.
На следующей схеме показана архитектура, применяемая в платформе Entity Framework для доступа к данным.
Запросы к объектам
Средства Entity Framework создают класс, производный от ObjectContext, который представляет контейнер сущностей, определенный в концептуальной модели. Класс ObjectContext поддерживает запросы к модели EDM для создания, обновления и удаления объектов сущностей, а также для получения сущностей в виде объектов. Платформа Entity Framework поддерживает запросы объектов к модели EDM. Запросы могут создаваться с использованием языка Entity SQL, технологии LINQ и методов построителя запросов объектов.
В концептуальной модели сущности связаны друг с другом ассоциациями. На уровне объектов эти ассоциации представляются свойствами, обеспечивающими доступ к коллекциям связанных объектов на основе ссылок на сущности. Например, в модели School свойство Department.Course возвращает коллекцию сущностей, содержащую объекты Course, согласно ассоциациям между Course и Department. Поскольку упоминаемые объекты не загружаются автоматически, для загрузки данных связанных объектов в контекст объекта необходимо вызвать метод Load, передав ему ссылку на сущность. Можно также указать путь запроса, который определяет, какие связанные объекты следует загружать вместе с возвращаемыми. Дополнительные сведения см. в разделе Запросы к данным как к объектам (платформа Entity Framework).
В следующем примере из краткого руководства показан запрос, который во время выполнения возвращает все объекты Department. Определение пути запроса гарантирует, что также будут возвращаться объекты Course, связанные с объектами Department. В Entity SQL предложение WHERE упорядочивает возвращаемые объекты по Name.
' Define a query that returns all Department objects and related
' Course objects, ordered by name.
Dim departmentQuery As ObjectQuery(Of Department) = _
schoolContext.Department.Include("Course").OrderBy("it.Name")
// Define a query that returns all Department objects and related
// Course objects, ordered by name.
ObjectQuery<Department> departmentQuery =
schoolContext.Department.Include("Course").OrderBy("it.Name");
Дополнительные сведения см. в разделе Запросы к данным как к объектам (платформа Entity Framework).
Можно определить модель EDM, использующую хранимые процедуры для выполнения запросов в источнике данных. Результирующий набор такой хранимой процедуры сопоставляется с сущностями концептуальной модели. Дополнительные сведения см. в разделе Поддержка хранимых процедур (платформа Entity Framework).
Работа с объектами
Объект в контексте объекта представляет данные, находящиеся в источнике данных, согласно типу сущности. В контексте объекта можно создавать, изменять и удалять объекты. Контекст объекта управляет идентификаторами и связями между объектами. Кроме того, можно выполнять сериализацию объектов и привязывать их к элементам управления. Дополнительные сведения см. в разделе Работа с объектами (платформа 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.Course
// 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.Course;
Платформа Entity Framework отслеживает изменения данных сущностей и позволяет сохранять их в источнике данных. В следующем примере из краткого руководства изменения в контексте объекта записываются в базу данных.
' Save object changes to the database, display a message,
' and refresh the form.
numChanges = schoolContext.SaveChanges()
// Save object changes to the database, display a message,
// and refresh the form.
numChanges = schoolContext.SaveChanges();
Дополнительные сведения см. в разделе Добавление, изменение и удаление объектов (платформа Entity Framework).
Можно определить модель EDM, которая производит вставку, обновления и удаления данных в источнике данных при помощи хранимых процедур. Эти хранимые процедуры сопоставляются с сущностями в концептуальной модели. Дополнительные сведения см. в разделе Поддержка хранимых процедур (платформа Entity Framework).
См. также
Основные понятия
Примеры LINQ to Entities
Типы модели EDM
Связи в модели EDM
Другие ресурсы
Службы объектов (платформа Entity Framework)
Сценарии приложений [платформа Entity Framework]