Share via


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

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

  2. 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
    
    
  3. Klik dua kali file .edmx untuk menampilkan model di jendela Model Browser dari Entity Designer. Pada permukaan Entity Designer, pilih properti Email dan Phone dari jenis entitas Contact, lalu klik kanan dan pilih Refaktor ke Dalam Jenis Kompleks Baru.

  4. Jenis kompleks baru dengan properti yang Email dipilih Phone ditambahkan ke Browser Model. Jenis kompleks diberi nama default: ganti nama jenis menjadi EmailPhone di jendela Properti. Selain itu, properti baru ComplexProperty ditambahkan ke jenis entitas Contact. Ganti nama properti menjadi EmailPhoneComplexType.

    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