Cara: Menjalankan Kueri yang Mengembalikan Jenis Kompleks
Topik ini menunjukkan cara menjalankan kueri Entity SQL yang mengembalikan objek jenis entitas yang berisi properti jenis kompleks.
Untuk menjalankan kode dalam contoh ini
Tambahkan AdventureWorks Sales Model ke proyek Anda dan konfigurasikan proyek Anda untuk menggunakan Entity Framework. Untuk informasi selengkapnya, lihat Cara: Menggunakan Wizard Model Data Entitas.
Di halaman kode untuk aplikasi Anda, tambahkan pernyataan
using
berikut (Imports
dalam Visual Basic):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
Klik dua kali file .edmx untuk menampilkan model di jendela Model Browser dari Entity Designer. Pada permukaan Entity Designer, pilih properti
Email
danPhone
dari jenis entitasContact
, lalu klik kanan dan pilih Refaktor ke Dalam Jenis Kompleks Baru.Jenis kompleks baru dengan properti yang
Email
dipilihPhone
ditambahkan ke Browser Model. Jenis kompleks diberi nama default: ganti nama jenis menjadiEmailPhone
di jendela Properti. Selain itu, properti baruComplexProperty
ditambahkan ke jenis entitasContact
. Ganti nama properti menjadiEmailPhoneComplexType.
Untuk informasi tentang membuat dan memodifikasi jenis kompleks dengan menggunakan Wizard Model Data Entitas, lihat Cara: Merefaktor Properti yang Ada menjadi Properti Jenis Kompleks dan Cara: Membuat dan Memodifikasi Jenis Kompleks.
Contoh
Contoh berikut menjalankan kueri yang mengembalikan kumpulan objek Contact
dan menampilkan dua properti objek Contact
: ContactID
dan nilai jenis kompleks 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