このトピックでは、EntityCommand を使用して、Entity SQL クエリを実行する方法について説明します。この例では、「複合型を使用してモデルを定義する方法 (Entity Framework)」で定義されたスキーマを使用します。プロジェクトの構成に関する情報、および Object Services を使って複合型を返すクエリを実行する方法の例については、「複合型を使用してオブジェクト クエリを作成および実行する方法 (Entity Framework)」を参照してください。
例
次の例では、複合型を使用してクエリを作成および実行する方法を示します。複合型は、エンティティ型のようなプロパティのセットを持つ一方でキー プロパティを持たない型を表します。CCustomer エンティティの Address プロパティは、複合型として実装されています。次の例では、CCustomer 型の 2 つのプロパティ (CustomerId および Address) が出力されます。Address は複合型なので、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();
}