방법: 복합 형식을 반환하는 쿼리 실행
이 항목에서는 복합 형식의 속성이 포함된 엔터티 형식 개체를 반환하는 Entity SQL 쿼리를 실행하는 방법을 보여 줍니다.
이 예제의 코드를 실행하려면
프로젝트에 AdventureWorks Sales 모델을 추가하고 Entity Framework를 사용하도록 프로젝트를 구성합니다. 자세한 내용은 방법: 엔터티 데이터 모델 마법사 사용을 참조하세요.
애플리케이션의 코드 페이지에서 다음
using
문(Visual Basic에서는Imports
)을 추가합니다.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;
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
.edmx 파일을 두 번 클릭하여 Entity Designer의 모델 브라우저 창에 모델을 표시합니다. Entity Designer 화면에서
Contact
엔터티 형식의Email
및Phone
속성을 선택한 다음, 마우스 오른쪽 단추를 클릭하고 새 복합 형식으로 리팩터링을 선택합니다.선택한
Email
및Phone
속성이 포함된 새 복합 형식이 모델 브라우저에 추가됩니다. 복합 형식에 기본 이름이 지정됩니다. 속성 창에서 형식의 이름을EmailPhone
으로 바꿉니다. 또한 새ComplexProperty
속성이Contact
엔터티 형식에 추가됩니다. 속성의 이름을EmailPhoneComplexType.
으로 바꿉니다.엔터티 데이터 모델 마법사를 사용하여 복합 형식을 만들고 수정하는 방법에 대한 자세한 내용은 방법: 기존 속성을 복합 형식 속성으로 리팩터링 및 방법: 복합 형식 만들기 및 수정을 참조하세요.
예시
다음 예제에서는 Contact
개체의 컬렉션을 반환하고 Contact
개체(ContactID
)의 두 속성인 EmailPhoneComplexType
복합 형식의 값을 표시하는 쿼리를 실행합니다.
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();
}
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