Работа с данными сущностей
Платформа Entity Framework компилирует метаданные концептуальной модели и модели хранения вместе с заданными для них сопоставлениями, создавая двунаправленные пары инструкций Entity SQL , называемые клиентскими представлениями. Эти представления управляют обработкой запросов и обновлений в среде выполнения. Компилятор сопоставлений может быть вызван для формирования представлений как во время разработки, так и во время выполнения, при выполнении первого запроса к концептуальной модели.
Платформа Entity Framework объединяет работу отдельных поставщиков данных ADO.NET и обеспечивает передачу объекта EntityConnection базовому поставщику данных и источнику данных.
Во время выполнения запрос проходит синтаксический анализ и преобразуется в каноническое дерево команд, которое является представлением запроса в объектной модели. Канонические деревья команд представляют операции выбора, обновления, вставки и удаления. Вся дальнейшая обработка выполняется над деревом команд, которое является средством взаимодействия между поставщиком System.Data.EntityClient и базовым поставщиком данных .NET Framework, например System.Data.SqlClient.
На следующей схеме показана архитектура доступа к данным в платформе Entity Framework.
Запросы к объектам
Средства ADO.NET EDM формируют класс, производный от ObjectContext, который представляет контейнер сущностей, определенный в концептуальной модели. Класс ObjectContext поддерживает запросы к концептуальной модели и обеспечивает создание, обновление и удаление объектов сущностей, а также получение сущностей в виде объектов. Платформа Entity Framework поддерживает запросы объектов к концептуальной модели. Запросы могут создаваться с использованием языка Entity SQL , технологии LINQ и методов построителя запросов объектов.
В концептуальной модели сущности связаны друг с другом сопоставлениями. На уровне объектов эти сопоставления представляются свойствами, обеспечивающими доступ к коллекциям связанных объектов на основе ссылок на сущности. Например, в модели School свойство Department.Course возвращает коллекцию сущностей, содержащую объекты Course, согласно сопоставлению между Course и Department. Если свойство LazyLoadingEnabled класса ObjectContext установлено в значение false, то ссылочные объекты не загружаются автоматически и для загрузки данных связанных объектов в контекст объекта необходимо вызвать метод Load, передав ему ссылку на сущность.
![]() |
---|
При использовании конструктора 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