Partager via


Procédure : exécuter une requête qui retourne des types complexes (EntityClient)

Cette rubrique indique comment exécuter une requête Entity SQL qui retourne des objets de type d'entité qui contiennent une propriété d'un type complexe.

Pour exécuter le code de cet exemple

  1. Ajoutez le modèle de vente Modèle de vente AdventureWorks Sales Model à votre projet et configurez celui-ci pour qu'il utilise Entity Framework . Pour plus d'informations, consultez Procédure : utiliser l'Assistant Entity Data Model (Entity Framework).

  2. Dans la page de codes de votre application, ajoutez les instructions using (Imports en Visual Basic) suivantes :

    Imports System
    Imports System.Collections.Generic
    Imports System.Collections
    Imports System.Data.Common
    Imports System.Data
    Imports System.IO
    Imports System.Data.SqlClient
    Imports System.Data.EntityClient
    Imports System.Data.Metadata.Edm
    
    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Data.Common;
    using System.Data;
    using System.IO;
    using System.Data.SqlClient;
    using System.Data.EntityClient;
    using System.Data.Metadata.Edm;
    
  3. Double-cliquez sur le fichier .edmx pour afficher le modèle dans la fenêtre Explorateur de modèles du Concepteur d'entités. Sur l'aire du Concepteur d'entités, sélectionnez les propriétés Email et Phone du type d'entité Contact, puis cliquez avec le bouton droit et sélectionnez Refactoriser en nouveau type complexe.

  4. Un nouveau type complexe avec les propriétés Email et Phone sélectionnées est ajouté à l'Explorateur de modèles. Le type complexe reçoit un nom par défaut : renommez le type en EmailPhone dans la fenêtre Propriétés. Une nouvelle propriété ComplexProperty est également ajoutée au type d'entité Contact. Renommez la propriété en EmailPhoneComplexType..

    Pour plus d'informations sur la création et la modification de types complexes à l'aide de l'Assistant EDM, consultez How to: Refactor Existing Properties into a Complex Type Property (Entity Data Model Tools) et How to: Create and Modify Complex Types.

Exemple

L'exemple suivant exécute une requête qui retourne une collection d'objets Contact et affiche deux propriétés des objets Contact objets : ContactID et les valeurs du type complexe EmailPhoneComplexType.

Using conn As New EntityConnection("name=AdventureWorksEntities")
    conn.Open()

    Dim esqlQuery As String = "SELECT VALUE contacts FROM" & _
        " AdventureWorksEntities.Contacts AS contacts WHERE contacts.ContactID == @id"

    ' Create an EntityCommand. 
    Using cmd As EntityCommand = conn.CreateCommand()
        cmd.CommandText = esqlQuery
        Dim param As New EntityParameter()
        param.ParameterName = "id"
        param.Value = 3
        cmd.Parameters.Add(param)
        ' Execute the command. 
        Using rdr As EntityDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
            ' The result returned by this query contains 
            ' Address complex Types. 
            While rdr.Read()
                ' Display CustomerID 
                Console.WriteLine("Contact ID: {0}", rdr("ContactID"))
                ' Display Address information. 
                Dim nestedRecord As DbDataRecord = TryCast(rdr("EmailPhoneComplexProperty"), DbDataRecord)
                Console.WriteLine("Email and Phone Info:")
                For i As Integer = 0 To nestedRecord.FieldCount - 1
                    Console.WriteLine((" " & nestedRecord.GetName(i) & ": ") + nestedRecord.GetValue(i))
                Next
            End While
        End Using
    End Using
    conn.Close()
End Using
using (EntityConnection conn =
    new EntityConnection("name=AdventureWorksEntities"))
{
    conn.Open();

    string esqlQuery = @"SELECT VALUE contacts FROM
            AdventureWorksEntities.Contacts AS contacts 
            WHERE contacts.ContactID == @id";

    // Create an EntityCommand.
    using (EntityCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = esqlQuery;
        EntityParameter param = new EntityParameter();
        param.ParameterName = "id";
        param.Value = 3;
        cmd.Parameters.Add(param);

        // Execute the command.
        using (EntityDataReader rdr =
            cmd.ExecuteReader(CommandBehavior.SequentialAccess))
        {
            // The result returned by this query contains 
            // Address complex Types.
            while (rdr.Read())
            {
                // Display CustomerID
                Console.WriteLine("Contact ID: {0}",
                    rdr["ContactID"]);
                // Display Address information.
                DbDataRecord nestedRecord =
                    rdr["EmailPhoneComplexProperty"] as DbDataRecord;
                Console.WriteLine("Email and Phone Info:");
                for (int i = 0; i < nestedRecord.FieldCount; i++)
                {
                    Console.WriteLine("  " + nestedRecord.GetName(i) +
                        ": " + nestedRecord.GetValue(i));
                }
            }
        }
    }
    conn.Close();
}