Cómo ejecutar una consulta que devuelve tipos complejos (EntityClient)

En este tema se muestra cómo ejecutar una consulta de Entity SQL que devuelve tipos complejos con EntityCommand. En este ejemplo se usan los esquemas definidos en el tema Cómo definir un modelo con un tipo complejo (Entity Framework). Para obtener información acerca de cómo configurar un proyecto y un ejemplo para ejecutar una consulta que devuelve tipos complejos usando Servicios de objeto, vea Cómo crear y ejecutar consultas de objeto con tipos complejos (Entity Framework).

Ejemplo

En el ejemplo de código siguiente se muestra cómo crear y ejecutar una consulta con un tipo complejo. El tipo complejo representa un tipo que incluye un conjunto de propiedades, como un tipo de entidad, pero no incluye una propiedad clave. La propiedad Address de la entidad CCustomer se implementa como tipo complejo. En el ejemplo siguiente se obtienen dos propiedades del tipo CCustomer: CustomerId y Address. Dado que Address es un tipo complejo, el código obtiene los valores de las propiedades 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();
}

Vea también

Otros recursos

Trabajar con EntityClient (tareas de Entity Framework)