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

  1. 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.

  2. Uygulamanızın kod sayfasına aşağıdaki using deyimleri 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
    
    
  3. Modeli Varlık Tasarım Aracı Model Tarayıcısı penceresinde görüntülemek için .edmx dosyasına çift tıklayın. Varlık Tasarım Aracı yüzeyinde varlık türünün ve özelliklerini seçinEmail, sonra sağ tıklayıp Yeni Karmaşık Tür'de Yeniden Düzenle'yi seçin.ContactPhone

  4. Seçili Email ve Phone ö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ın EmailPhone. Ayrıca varlık türüne Contact yeni ComplexProperty bir özellik eklenir. özelliğini olarak yeniden adlandırın EmailPhoneComplexType.

    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