Nasıl yapılır: Karmaşık Türler Döndüren Bir Sorgu Yürütme
Bu konu başlığında, karmaşık türde bir özellik içeren varlık türü nesnelerini döndüren bir Entity SQL sorgusunun nasıl yürütüldüğü gösterilir.
Bu örnekteki kodu çalıştırmak için
Projenize AdventureWorks Satış Modeli'ni ekleyin ve projenizi Entity Framework kullanacak şekilde yapılandırın. Daha fazla bilgi için bkz . Nasıl yapılır: Varlık Veri Modeli Sihirbazı'nı kullanma.
Uygulamanızın kod sayfasına aşağıdaki
using
yönergeleri ekleyin (Imports
Visual Basic'te):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
Modeli Varlık Tasarımcısı'nın Model Tarayıcısı penceresinde görüntülemek için .edmx dosyasına çift tıklayın. Varlık Tasarımcısı yüzeyinde varlık türünün ve özelliklerini seçin
Email
, sonra sağ tıklayıp Yeni Karmaşık Tür'de Yeniden Düzenle'yi seçin.Contact
Phone
Seçili
Email
vePhone
özelliklere sahip yeni bir karmaşık tür Model Tarayıcısı'na eklenir. Karmaşık türe varsayılan bir ad verilir: Türü Özellikler penceresinde olarak yeniden adlandırınEmailPhone
. Ayrıca varlık türüneContact
yeniComplexProperty
bir özellik eklenir. özelliğini olarak yeniden adlandırınEmailPhoneComplexType.
Varlık Veri Modeli Sihirbazı'nı kullanarak karmaşık türler oluşturma ve değiştirme hakkında bilgi için bkz . Nasıl yapılır: Varolan Özellikleri Karmaşık Tür Özelliğinde Yeniden Düzenleme ve Nasıl Yapılır: Karmaşık Türler Oluşturma ve Değiştirme.
Örnek
Aşağıdaki örnek, bir nesne koleksiyonu Contact
döndüren ve nesnelerin iki özelliğini Contact
görüntüleyen bir sorgu yürütür: ContactID
ve karmaşık türün EmailPhoneComplexType
değerleri.
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