Freigeben über


Anwendungscode mit Zuordnungen (EDM)

Das im Entitätsdatenmodell (EDM)-Thema Implementieren von Zuordnungen (EDM) entworfene Objektmodell kann von Clientanwendungen verwendet werden. EDM-Anwendungen können Daten ohne SQL-Anweisungen instanziieren, abfragen und dauerhaft speichern. Weitere Informationen finden Sie unter Übersicht über Object Services (Entity Framework).

Der Anwendungscode in diesem Thema veranschaulicht, wie Zuordnungen der Entitäten mit dem Namen Customers und Orders instanziiert werden und in den Zuordnungen zwischen Customers und Orders sowie zwischen Orders und OrderLines navigiert werden kann.

Erstellen und Initialisieren von Entitäten

Im folgenden Codeausschnitt ist dargestellt, wie eine Instanz für jeden der drei Typen Customers, Orders und OrderLines erstellt wird. Eine Verbindung mit dem Namespace OrderInfo wird in folgender Codezeile instanziiert: OrderInfo orderInfo = new OrderInfo().

Da die Entitäten programmierbare Klassen sind, werden sie mit dem Konstruktor erstellt, der beim Erstellen der Klassenbibliothek bereitgestellt wird. Fügen Sie diese Entitäten dem Objektkontext mithilfe der AddToOrderInfo-Methode von OrderInfoObjectContext hinzu. Weitere Informationen finden Sie unter Hinzufügen, Ändern und Löschen von Objekten (Entity Framework).

Das folgende Codesegment erstellt einen Customer, eine Order und eine OrderLine. Der Code instanziiert außerdem Zuordnungen zwischen Customer und Order sowie zwischen Order und OrderLine.

Die Objekte werden nach dem Initialisieren im folgenden Code zum Speichern hinzugefügt, und die Änderungen werden gespeichert.

                    Dim i As Integer = 0
                    Dim newCustomer As Customers = _
                    New Customers()
                    newCustomer.CustomerId = _
                                    Guid.NewGuid()
                    newCustomer.Name = "Customer-" + _
                                    i.ToString()
                    newCustomer.Address = "Address-" + _
                                    i.ToString()
                    newCustomer.City = "Redmond"
                    newCustomer.Phone = "123 456-7890"
                    newCustomer.ZipCode = 98054

                    Dim newOrder As New Orders()
                    newOrder.OrderId = i.ToString()
                    newOrder.Customers = newCustomer
                    newOrder.ShippingAddress = _
                                "Address-" + i.ToString()
                    newOrder.Tax = 0
                    newOrder.TotalAmount = 0

                    Dim newOrderLines As OrderLines = New OrderLines()
                    newOrderLines.OrderLineId = Guid.NewGuid()
                    newOrderLines.ProductName = "Product-" + _
                    i.ToString()
                    newOrderLines.Quantity = 2
                    newOrderLines.UnitPrice = 67.71
                    newOrderLines.ExtendedPrice = _
                        newOrderLines.Quantity * _
                        newOrderLines.UnitPrice

                    newOrder.OrderLines.Add(newOrderLines)

                    orderInfo.AddToCustomers(newCustomer)
                    orderInfo.AddToOrders(newOrder)

                    orderInfo.SaveChanges()
                        int i = 0;
                        Customers newCustomer = new Customers();
                        newCustomer.CustomerId = Guid.NewGuid(); 
                        newCustomer.Name = "Customer-" + i.ToString();
                        newCustomer.Address = "Address" + i.ToString(); 
                        newCustomer.City = "Redmond"; 
                        newCustomer.Phone = "123 456-7890";
                        newCustomer.ZipCode = 98054;

                        Orders newOrder = new Orders();
                        newOrder.OrderId = i.ToString();
                        newOrder.Customers = newCustomer;
                        newOrder.ShippingAddress = "Address-" + 
                                                        i.ToString();
                        newOrder.Tax = 0;
                        newOrder.TotalAmount = 0;

                        OrderLines newOrderLines = new OrderLines();
                        newOrderLines.OrderLineId = Guid.NewGuid(); 
                        newOrderLines.ProductName = "Product-" +
                            i.ToString(); 
                        newOrderLines.Quantity = 2; 
                        newOrderLines.UnitPrice = (decimal)67.70; 
                        newOrderLines.ExtendedPrice = 
                            newOrderLines.Quantity * 
                            newOrderLines.UnitPrice;

                        newOrder.OrderLines.Add(newOrderLines);

                        orderInfo.AddToCustomers(newCustomer);
                        orderInfo.AddToOrders(newOrder);

                        orderInfo.SaveChanges();

Navigieren in Zuordnungen

Greifen Sie unter Verwendung von Zuordnungen mit der im Entwurfsschema angegebenen NavigationProperty auf die mit Customers verknüpften Orders sowie auf die mit Orders verknüpften OrderLines zu. Weitere Informationen über Navigationseigenschaften finden Sie unter NavigationProperty-Element (EntityType CSDL) .

Eine Beschreibung aller in diesem Beispiel verwendeten Eigenschaften finden Sie unter Implementieren von Zuordnungen (EDM) .

Von der folgenden foreach-Schleife wird die Auflistung der Orders, die in der Customer.OrdersNavigationProperty enthalten sind, sowie jede der in der Order.OrderLinesNavigationProperty enthaltenen OrderLines abgerufen. Die Load-Methode muss vor dem Navigieren dieser Eigenschaften aufgerufen werden. Von der Load-Methode werden die Elemente aus der Datenbank abgerufen. (Eine Alternative zur Load-Methode ist die Verwendung der Source-Eigenschaft von Orders und OrderLines.)

               For Each customer In orderInfo.Customers
                    Console.WriteLine("Customer: " + customer.Name)

                    ' If customer has orders, load orders.
                    customer.Orders.Load()
                    For Each order In orderInfo.Orders
                        Console.WriteLine(vbTab + "Order#: " _
                                          + order.OrderId)

                        ' Load orderlines
                        order.OrderLines.Load()
                        For Each orderline In order.OrderLines
                            Console.WriteLine(vbTab + vbTab + _
                                              orderline.ProductName)
                     Next
                 Next
                    foreach (Customers customer in orderInfo.Customers)
                    {
                        Console.WriteLine("Customer: " + 
                                              customer.Name);

                        //If customer has orders, load orders.
                        customer.Orders.Load();
                        foreach (Orders order in customer.Orders)
                        {
                            Console.WriteLine("\t" + order.OrderId);

                            // Load OrderLines.
                            order.OrderLines.Load();
                            foreach (OrderLines orderLine in 
                                     order.OrderLines)
                                Console.WriteLine(
                                 "\t\t" + orderLine.ProductName);
                        }
                    }

Verbindungen in der 'App Config'-Datei

Um die Entitäten und Zuordnungen des OrderInfo-Objektmodells verwenden zu können, ist eine Verbindung mit der Datenbank erforderlich, die die Daten für die mit dem Entity Data Model (EDM) erstellten Anwendungen speichert. Das Öffnen der vom Anwendungscode verwendeten Verbindung ist vergleichbar mit dem Öffnen einer SQL-Verbindung. Zusätzlich zu der Verbindungszeichenfolge, die von einer SQL-Verbindung verwendet wird, um die von diesem Modell verwendete Datenbank und den Server zu identifizieren, ist für die Verbindung ein Pfad zu den EDM-Schemas und Zuordnungsspezifikationen erforderlich. In diesem Beispiel ist die Verbindungszeichenfolge und der Speicherort der Metadaten in der app.config-Datei enthalten. Der Inhalt der app.config -Datei ist im folgenden Code dargestellt:

?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="OrderInfo" 
                 connectionString='Metadata=.;
                 Provider=System.Data.SqlClient;
                 Provider Connection String="server=serverName;
                 database=OrderInfo;Integrated Security=true;
                 Connection Timeout=5;multipleactiveresultsets=true"'
                 providerName="System.Data.EntityClient"/>
    </connectionStrings>
</configuration>

Beispiel

Der vollständige Code, der zu Ausführung des vorherigen Segments verwendet wird, ist im folgenden Beispiel dargestellt. Der Aufruf an die Hilfsmethode ComputeOrder****wird durch einen Kommentar im letzten Codesegment identifiziert. Informationen zur Implementierung der Hilfsmethode finden Sie unter Gewusst wie: Anpassen von generierten Datenobjekten (Entity Framework) .

Imports OrderInfoModel
Module Module1

    Sub Main()
        Try
            Using orderInfo As OrderInfo = New OrderInfo()
                For Each customer In orderInfo.Customers
                    Console.WriteLine("Customer: " + customer.Name)

                    ' If customer has orders, load orders.
                    customer.Orders.Load()
                    For Each order In orderInfo.Orders
                        Console.WriteLine(vbTab + "Order#: " _
                                          + order.OrderId)

                        ' Load orderlines
                        order.OrderLines.Load()
                        For Each orderline In order.OrderLines
                            Console.WriteLine(vbTab + vbTab + _
                                              orderline.ProductName)
                        Next

                        For Each order2 In orderInfo.Orders
                            Console.WriteLine("Order#: " + _
                                               order2.OrderId)

                            ' Display OrderLines products and quantities.
                            order2.OrderLines.Load()
                            For Each orderline2 In order2.OrderLines
                                Console.WriteLine(vbTab + "{0} " + _
                                              "UnitPrice: ${1} " + _
                                              "Quantity: {2}", _
                                              orderline2.ProductName, _
                                              orderline2.UnitPrice, _
                                              orderline2.Quantity)

                                ' Open the commented code in this
                                ' section to use the ComputeOrder
                                ' helper method defined in the topic
                                ' Helper Methods (EDM).
                                'Console.WriteLine(vbTab + vbTab + _
                                'vbTab + "Total Order # {0}: " + _
                                '"${1} Including ${2} tax", _
                                'order2.OrderId, _
                                'Decimal.Round( _
                                'order2.ComputeOrder(), _
                                '2), _
                                'order2.Tax)

                            Next
                        Next
                    Next
                Next

                ' Set to True to add entities.
                If False Then
                    Dim i As Integer = 0
                    Dim newCustomer As Customers = _
                    New Customers()
                    newCustomer.CustomerId = _
                                    Guid.NewGuid()
                    newCustomer.Name = "Customer-" + _
                                    i.ToString()
                    newCustomer.Address = "Address-" + _
                                    i.ToString()
                    newCustomer.City = "Redmond"
                    newCustomer.Phone = "123 456-7890"
                    newCustomer.ZipCode = 98054

                    Dim newOrder As New Orders()
                    newOrder.OrderId = i.ToString()
                    newOrder.Customers = newCustomer
                    newOrder.ShippingAddress = _
                                "Address-" + i.ToString()
                    newOrder.Tax = 0
                    newOrder.TotalAmount = 0

                    Dim newOrderLines As OrderLines = New OrderLines()
                    newOrderLines.OrderLineId = Guid.NewGuid()
                    newOrderLines.ProductName = "Product-" + _
                    i.ToString()
                    newOrderLines.Quantity = 2
                    newOrderLines.UnitPrice = 67.71
                    newOrderLines.ExtendedPrice = _
                        newOrderLines.Quantity * _
                        newOrderLines.UnitPrice

                    newOrder.OrderLines.Add(newOrderLines)

                    orderInfo.AddToCustomers(newCustomer)
                    orderInfo.AddToOrders(newOrder)

                    orderInfo.SaveChanges()

                End If

            End Using

        Catch ex As Exception
            Console.WriteLine(ex.Message.ToString() + "\n" + _
                              ex.InnerException.ToString())
        End Try

    End Sub

End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OrderInfoModel;

namespace Associations_CS
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (OrderInfo  orderInfo = new OrderInfo())
                {
                    foreach (Customers customer in orderInfo.Customers)
                    {
                        Console.WriteLine("Customer: " + 
                                              customer.Name);

                        //If customer has orders, load orders.
                        customer.Orders.Load();
                        foreach (Orders order in customer.Orders)
                        {
                            Console.WriteLine("\t" + order.OrderId);

                            // Load OrderLines.
                            order.OrderLines.Load();
                            foreach (OrderLines orderLine in 
                                     order.OrderLines)
                                Console.WriteLine(
                                 "\t\t" + orderLine.ProductName);
                        }
                    }

                    foreach (Orders order in orderInfo.Orders)
                    {
                        Console.WriteLine("Order: " + order.OrderId);

                        // Display OrderLines products and quantities.
                        order.OrderLines.Load();
                        foreach (OrderLines orderLine in 
                                 order.OrderLines)
                            Console.WriteLine(
                                "\t{0}  UnitPrice: ${1} Quantity: {2}", 
                                orderLine.ProductName,
                                orderLine.UnitPrice,
                                orderLine.Quantity );

                        // Open the commented code in this section to
                        // use the ComputeOrder helper method defined
                        // in the topic Helper Methods (EDM).
                      /*Console.WriteLine("\t\t\tTotal Order #{0}: " +
                                     "${1} Including ${2} tax", 
                                     order.OrderId,
                                     Decimal.Round(
                                     order.ComputeOrder(), 2),
                                     order.Tax); */

                    }

                    if(false)  // Set to true to add entities.
                    {
                        int i = 0;
                        Customers newCustomer = new Customers();
                        newCustomer.CustomerId = Guid.NewGuid(); 
                        newCustomer.Name = "Customer-" + i.ToString();
                        newCustomer.Address = "Address" + i.ToString(); 
                        newCustomer.City = "Redmond"; 
                        newCustomer.Phone = "123 456-7890";
                        newCustomer.ZipCode = 98054;

                        Orders newOrder = new Orders();
                        newOrder.OrderId = i.ToString();
                        newOrder.Customers = newCustomer;
                        newOrder.ShippingAddress = "Address-" + 
                                                        i.ToString();
                        newOrder.Tax = 0;
                        newOrder.TotalAmount = 0;

                        OrderLines newOrderLines = new OrderLines();
                        newOrderLines.OrderLineId = Guid.NewGuid(); 
                        newOrderLines.ProductName = "Product-" +
                            i.ToString(); 
                        newOrderLines.Quantity = 2; 
                        newOrderLines.UnitPrice = (decimal)67.70; 
                        newOrderLines.ExtendedPrice = 
                            newOrderLines.Quantity * 
                            newOrderLines.UnitPrice;

                        newOrder.OrderLines.Add(newOrderLines);

                        orderInfo.AddToCustomers(newCustomer);
                        orderInfo.AddToOrders(newOrder);

                        orderInfo.SaveChanges();

                        
                    }
                }
            }

            catch (System.Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            
        }
    }
}

Siehe auch

Konzepte

Implementieren von Zuordnungen (EDM)
Navigationseigenschaften (EDM)