複合型を返すクエリの実行方法 (EntityClient)
このトピックでは、複合型プロパティを含むエンティティ型オブジェクトを返す Entity SQL クエリを実行する方法について説明します。
この例のコードを実行するには
Add the AdventureWorks Sales Model to your project and configure your project to use the Entity Framework . 詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」を参照してください。
アプリケーションのコード ページで、次の using ステートメント (Visual Basic の場合は Imports) を追加します。
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;
.edmx ファイルをダブルクリックして、エンティティ デザイナーの [モデル ブラウザー] ウィンドウにモデルを表示します。 エンティティ デザイナー画面で、Contact エンティティ型の Email プロパティと Phone プロパティを選択し、右クリックして [新しい複合型へのリファクター] を選択します。
選択した Email プロパティと Phone プロパティの新しい複合型がモデル ブラウザーに追加されます。 複合型には既定の名前が付きます。プロパティ ウィンドウで型の名前を EmailPhone に変更します。 また、新しい ComplexProperty プロパティが Contact エンティティ型に追加されます。 プロパティの名前を EmailPhoneComplexType に変更します。
Entity Data Model ウィザードを使用した複合型の作成と変更の詳細については、「How to: Refactor Existing Properties into a Complex Type Property (Entity Data Model Tools)」および「How to: Create and Modify Complex Types」を参照してください。
例
次の例は、Contact オブジェクトのコレクションを返し、Contact オブジェクトの 2 つのプロパティとして ContactID と 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();
}