Partager via


Exécution de requêtes sur des entités et des associations (Démarrage rapide d'Entity Framework)

Dans cette tâche, vous aller créer des requêtes fortement typées sur les objets CLR qui représentent des entités et associations du modèle School, puis lier des contrôles d'affichage aux collections d'objets retournées à partir de ces requêtes.

Pour interroger la base de données School à propos des départements

  1. Au début du fichier de code du formulaire CourseViewer, ajoutez les instructions using (C#) ou Imports (Visual Basic) ci-après pour faire référence au modèle créé à partir de la base de données School et à l'espace de noms de l'entité.

    Imports System.Data.Objects
    Imports System.Data.Objects.DataClasses
    
    using System.Data.Objects;
    using System.Data.Objects.DataClasses;
    
  2. En haut de la définition de classe partielle du formulaire CourseViewer, ajoutez le code ci-après, qui crée une instance d'ObjectContext.

    ' Create an ObjectContext instance based on SchoolEntity.
    Private schoolContext As SchoolEntities
    
    //Create an ObjectContext instance based on SchoolEntity
    private SchoolEntities schoolContext;
    
  3. Dans le concepteur de formulaires CourseViewer, double-cliquez sur le formulaire CourseViewer.

    La page de codes du formulaire s'ouvre et la méthode de gestionnaire d'événements courseViewer _Load est créée.

  4. Dans la méthode de gestionnaire d'événements courseViewer _Load, copiez et collez le code ci-après, qui définit DataGridView, exécute une requête qui retourne une collection de départements (classés par Name) et lie la collection d'objets Department au contrôle 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) = _
        From d In schoolContext.Departments.Include("Courses") _
        Order By d.Name _
        Select d
    Try
        ' Bind the ComboBox control to the query.
        ' To prevent the query from being executed multiple times during binding, 
        ' it is recommended to bind controls to the result of the Execute method. 
        Me.departmentList.DisplayMember = "Name"
        Me.departmentList.DataSource = CType(departmentQuery, ObjectQuery).Execute(MergeOption.AppendOnly)
    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 course objects, ordered by name.
    var departmentQuery = from d in schoolContext.Departments.Include("Courses")
                          orderby d.Name
                          select d;
    try
    {
        // Bind the ComboBox control to the query, 
        // which is executed during data binding.
        // To prevent the query from being executed multiple times during binding, 
        // it is recommended to bind controls to the result of the Execute method. 
        this.departmentList.DisplayMember = "Name";
        this.departmentList.DataSource = ((ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    

Pour afficher les cours pour le département sélectionné

  1. Dans le concepteur de formulaires CourseViewer, double-cliquez sur le contrôle departmentList.

    Cette opération crée la méthode de gestionnaire d'événements departmentList_SelectedIndexChanged.

  2. Collez le code ci-dessous, qui charge les cours liés au département sélectionné.

    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.Courses
    
        ' Hide the columns that are bound to the navigation properties on Course.
        courseGridView.Columns("Department").Visible = False
        courseGridView.Columns("StudentGrades").Visible = False
        courseGridView.Columns("OnlineCourse").Visible = False
        courseGridView.Columns("OnsiteCourse").Visible = False
        courseGridView.Columns("People").Visible = False
        courseGridView.Columns("DepartmentId").Visible = False
    
        courseGridView.AllowUserToDeleteRows = False
    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.Courses;
    
            // Hide the columns that are bound to the navigation properties on Course.
            courseGridView.Columns["Department"].Visible = false;
            courseGridView.Columns["StudentGrades"].Visible = false;
            courseGridView.Columns["OnlineCourse"].Visible = false;
            courseGridView.Columns["OnsiteCourse"].Visible = false;
            courseGridView.Columns["People"].Visible = false;
            courseGridView.Columns["DepartmentId"].Visible = false;
    
            courseGridView.AllowUserToDeleteRows = false;
    courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    

Étapes suivantes

Vous avez créé des requêtes qui retournent des objets Department et Course et lié ces objets à des contrôles. Vous allez à présent enregistrer dans la base de données les modifications apportées aux objets Course de la grille de données : Insertion et mise à jour de données (Démarrage rapide d'Entity Framework).

Voir aussi

Concepts

Interrogation d'un modèle conceptuel (Entity Framework)
Utilisation des données d'entité

Autres ressources

Exemples (Entity Framework)