Partager via


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

Cette rubrique montre comment exécuter une requête Entité SQL qui retourne des types complexes à l'aide d'EntityCommand. Cet exemple utilise les schémas définis dans Procédure : définir un modèle avec des types complexes (Entity Framework). Pour plus d'informations sur la configuration de votre projet et obtenir un exemple d'exécution d'une requête qui retourne des types complexes à l'aide d'Object Services, voir Procédure : créer et exécuter des requêtes d'objet avec des types complexes (Entity Framework).

Exemple

L'exemple suivant montre comment créer et exécuter une requête avec un type complexe. Le type complexe représente un type qui inclut un ensemble de propriétés (comme un type d'entité) mais qui n'inclut pas de propriété de clé. La propriété Address de l'entité CCustomer est implémentée en tant que type complexe. L'exemple suivant génère deux propriétés de type CCustomer : CustomerId et Address. Address étant un type complexe, le code génère les valeurs des propriétés d'Address.

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

    ' Create an EntityCommand.
    Using cmd As EntityCommand = conn.CreateCommand()

        ' Create a query that returns Address complex type.
        Dim esqlQuery As String = "SELECT VALUE customers FROM " & _
            "CustomerComplexAddrContext.CCustomers " & _
            "AS customers WHERE customers.CustomerId < 3"
        cmd.CommandText = esqlQuery
        ' Execute the command.
        Using rdr As EntityDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
            ' The result returned by this query contains 
            ' Address complex Types.
            Do While rdr.Read
                ' Display CustomerID
                Console.WriteLine("Customer ID: {0}", _
                    rdr.Item("CustomerId"))
                ' Display Address information.
                Dim nestedRecord As DbDataRecord = DirectCast(rdr.Item("Address"), DbDataRecord)
                Console.WriteLine("Address:")
                For i = 0 To nestedRecord.FieldCount - 1
                    Console.WriteLine("  " + nestedRecord.GetName(i) & _
                            ": " + nestedRecord.GetValue(i))
                Next i
            Loop
        End Using
    End Using
    conn.Close()
End Using
using (EntityConnection conn =
    new EntityConnection("name=CustomerComplexAddrContext"))
{
    conn.Open();

    // Create a query that returns Address complex type.
    string esqlQuery =
        @"SELECT VALUE customers FROM
            CustomerComplexAddrContext.CCustomers
            AS customers WHERE customers.CustomerId < 3";
    try
    {
        // Create an EntityCommand.
        using (EntityCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = esqlQuery;
            // 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("Customer ID: {0}",
                        rdr["CustomerId"]);
                    // Display Address information.
                    DbDataRecord nestedRecord =
                        rdr["Address"] as DbDataRecord;
                    Console.WriteLine("Address:");
                    for (int i = 0; i < nestedRecord.FieldCount; i++)
                    {
                        Console.WriteLine("  " + nestedRecord.GetName(i) +
                            ": " + nestedRecord.GetValue(i));
                    }
                }
            }
        }
    }
    catch (EntityException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    conn.Close();
}

Voir aussi

Autres ressources

Utilisation d'EntityClient (Tâches Entity Framework)