Gewusst wie: Ausführen einer Abfrage, die komplexe Typen zurückgibt (EntityClient)
In diesem Thema wird erläutert, wie Sie eine Entity SQL-Abfrage ausführen können, die mithilfe von EntityCommand komplexe Typen zurückgibt. Dieses Beispiel verwendet die in Gewusst wie: Definieren eines Modells mit komplexen Typen (Entity Framework) definierten Schemas. Informationen über die Konfiguration eines Projekts und ein Beispiel zur Ausführung einer Abfrage, die mithilfe von Object Services komplexe Typen zurückgibt, finden Sie unter Gewusst wie: Erstellen und Ausführen von Objektabfragen mit komplexen Typen (Entity Framework).
Beispiel
Im folgenden Beispiel wird dargestellt, wie eine Abfrage mit einem komplexen Typ erstellt und ausgeführt wird. Der komplexe Typ stellt einen Typ dar, der (vergleichbar mit einem Entitätstyp) eine Reihe von Eigenschaften, jedoch keine Schlüsseleigenschaft enthält. Die Address-Eigenschaft der CCustomer-Entität ist als komplexer Typ implementiert. Von folgendem Beispiel werden zwei Eigenschaften vom CCustomer-Typ ausgegeben: CustomerId und Address. Da es sich bei Address um einen komplexen Typ handelt, werden durch den Code Werte der Eigenschaften von Address ausgegeben.
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();
}