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


Запросы к сущностям и ассоциациям (краткое руководство по платформе Entity Framework)

В этой задаче создаются строго типизированные запросы к объектам среды CLR, которые представляют сущности и ассоциации в модели School, а элементы управления отображением привязываются к коллекциям объектов, возвращаемым этими запросами.

Запрос данных о факультетах из базы данных School

  1. В начале файла с кодом для формы CourseViewer добавьте директиву using (C#) или Imports (Visual Basic), чтобы сослаться на модель, созданную из базы данных School, и пространство имен сущностей.

    Imports System.Data.Objects
    Imports System.Data.Objects.DataClasses
    Imports CourseManager.SchoolModel
    
    using System.Data.Objects;
    using System.Data.Objects.DataClasses;
    
  2. В начале определения разделяемого класса для формы CourseViewer добавьте следующий код, создающий экземпляр ObjectContext.

    ' Create an ObjectContext instance based on SchoolEntity.
    Private schoolContext As SchoolEntities
    
    // Create an ObjectContext instance based on SchoolEntity.
    private SchoolEntities schoolContext;
    
  3. В конструкторе форм CourseViewer дважды щелкните форму CourseViewer.

    Откроется страница с кодом формы, и будет создан метод обработчика события courseViewer _Load.

  4. В методе обработчика события courseViewer _Load скопируйте и вставьте следующий код, который определяет представление DataGridView, выполняет запрос, возвращающий коллекцию факультетов (упорядоченную по параметру Name), и привязывает коллекцию объектов Department к элементу управления departmentList.

    ' Initialize the ObjectContext.
    schoolContext = New SchoolEntities()
    
    ' 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")
    
    Try
        ' Bind the ComboBox control to the query, which is 
        ' executed during data binding.
        Me.departmentList.DataSource = departmentQuery
        Me.departmentList.DisplayMember = "Name"
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    
    // Initialize the ObjectContext.
    schoolContext = new SchoolEntities();
    
    // 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");
    
    try
    {
        // Bind the ComboBox control to the query, which is
        // executed during data binding.
        this.departmentList.DataSource = departmentQuery;
        this.departmentList.DisplayMember = "Name";
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    

Отображение курсов для выбранного факультета

  1. В конструкторе форм CourseViewer дважды щелкните элемент управления departmentList.

    Будет создан метод обработчика события departmentList_SelectedIndexChanged.

  2. Вставьте следующий код, который загружает курсы, связанные с выбранным факультетом.

    Try
        ' 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
        courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    
    try
    {
        // 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;
    
        courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    

Следующие шаги

Были успешно созданы запросы, возвращающие объекты Department и Course и связывающие эти объекты с элементами управления. После этого необходимо сохранить изменения, выполненные для объектов Course в сетке данных, в базе данных: Вставка и обновление данных (краткое руководство по платформе Entity Framework).

См. также

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

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

Другие ресурсы

Образцы (платформа Entity Framework)
Службы объектов (платформа Entity Framework)