Freigeben über


Gewusst wie: Ausführen einer Abfrage, die komplexe Typen zurückgibt (EntityClient)

Dieses Thema zeigt, wie eine Entity SQL -Abfrage ausgeführt wird, die Entitätstypobjekte zurückgibt, die eine Eigenschaft eines komplexen Typs enthalten.

So führen Sie den Code in diesem Beispiel aus

  1. Fügen Sie dem Projekt das AdventureWorks Sales-Modell hinzu, und konfigurieren Sie das Projekt für die Verwendung von Entity Framework . Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Entity Data Model-Assistenten (Entity Framework).

  2. Fügen Sie der Codepage Ihrer Anwendung die folgenden using-Anweisungen (Imports in Visual Basic) hinzu:

    Imports System
    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
    
    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;
    
  3. Doppelklicken Sie auf die EDMX-Datei, um das Modell im Modellbrowser-Fenster des Entity Designers anzuzeigen. Wählen Sie auf der Entity Designer-Oberfläche die Eigenschaften Email und Phone des Entitätstyps Contact aus, klicken Sie mit der rechten Maustaste, und wählen Sie dann In neuen komplexen Typ umgestalten aus.

  4. Ein neuer komplexer Typ mit den ausgewählten Eigenschaften Email und Phone wird dem Modellbrowser hinzugefügt. Dem komplexen Typ wurde ein Standardname zugewiesen. Benennen Sie den Typ im Eigenschaftenfenster in EmailPhone um. Außerdem wurde dem Entitätstyp Contact die Eigenschaft ComplexProperty hinzugefügt. Geben Sie der Eigenschaft den Namen EmailPhoneComplexType.

    Informationen zum Erstellen und Ändern von komplexen Typen mit dem Assistenten für Entity Data Model finden Sie unter How to: Refactor Existing Properties into a Complex Type Property (Entity Data Model Tools) und How to: Create and Modify Complex Types.

Beispiel

Im folgenden Beispiel wird eine Abfrage gezeigt, die eine Auflistung von Contact-Objekten zurückgibt und zwei Eigenschaften des Contact -Objekts anzeigt: ContactID und die Werte des komplexen Typs EmailPhoneComplexType.

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
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();
}