Freigeben über


Gewusst wie: Objekte mit mehreren Entitätenmengen pro Typ abfragen (Entity Framework)

Die Implementierung von mehreren Entitätenmengen pro Typ (Multiple Entity Sets per Type, MEST) ermöglicht Anwendungen den Zugriff auf Daten desselben Typs von den verschiedenen im Speicher verwendeten Partitionen. Der Code in diesem Abschnitt veranschaulicht den Zugriff auf einen einzelnen Customer-Typ in zwei separaten Auflistungen, die von der vom Objektkontext bereitgestellten Abfrage <T> zurückgegeben werden. Der Code in diesem Thema verwendet das im Thema Gewusst wie: Definieren eines Modells mit mehreren Entitätenmengen pro Typ (Entity Framework) entworfene Datenmodell.

So konfigurieren Sie das Projekt und die Anwendung mit mehreren Entitätenmengen pro Typ

  1. Erstellen Sie ein Konsolenanwendungsprojekt, und fügen Sie Verweise auf System.Data.Entity und System.Runtime.Serialization hinzu.

  2. Fügen Sie einen Verweis auf die DLL hinzu, die von dem im Thema Gewusst wie: Definieren eines Modells mit mehreren Entitätenmengen pro Typ (Entity Framework) definierten Datenmodell erstellt wird.

  3. Kopieren Sie die Schemas aus dem Thema Gewusst wie: Definieren eines Modells mit mehreren Entitätenmengen pro Typ (Entity Framework) in denselben Ordner wie die ausführbare Datei.

  4. Fügen Sie eine Anwendungskonfigurationsdatei hinzu. Die folgende Syntax stellt einen Pfad zu Schemametadaten und eine Verbindungszeichenfolge für den Server zur Verfügung, auf dem die Daten gehostet werden.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="RegionalCustomersEntities" 
         connectionString="metadata=.;
         provider=System.Data.SqlClient;
         provider connection string=&quot;
         Data Source=serverName;
         Initial Catalog=RegionalCustomersMEST;
         Integrated Security=True;
         multipleactiveresultsets=true&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>

</configuration>

Beispiel

Im folgenden Beispielcode werden mehrere Entitätenmengen pro Typ verwendet. Verwenden Sie diesen Code in der Programmdatei des Projekts.

Auf den Customer-Typ wird sowohl von der CustomersEast-Abfrage als auch von der CustomersWest -Abfrage im folgenden Beispiel zugegriffen.

Die Zuordnung zwischen "Customer" und "Order" kann vom OrderEast-Ende oder vom OrderWest-Ende der Zuordnung bzw. vom Customer-Ende navigiert werden.

Option Explicit On
Option Strict On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports RegionalCustomersModel

Module Module1
    Sub Main()
        Try
            Using objCtx As RegionalCustomersEntities = _
                        New RegionalCustomersEntities()
                Console.WriteLine("Number of Customers East: " & _
                    objCtx.CustomersEast.Count().ToString())

                For Each customer As Customer In objCtx.CustomersEast
                    Console.WriteLine(customer.Name)
                    customer.OrdersEast.Load()
                    Dim totalOrderAmts As Decimal = 0
                    For Each order As OrderEast In customer.OrdersEast
                        Console.WriteLine( _
                            "Order: {0} Total: {1} Tax: {2}", _
                            order.OrderId, order.OrderTotal, order.Tax)
                        totalOrderAmts = totalOrderAmts + order.OrderTotal
                    Next

                    Console.WriteLine("Check totals: {0} <=> {1}", _
                        totalOrderAmts.ToString(), _
                        customer.TotalPurchases.ToString())
                Next

                Console.WriteLine("Number of Customers West: " & _
                    objCtx.CustomersWest.Count().ToString())
                'objCtx.CustomersWest.Count(Of Customer)().ToString())

                For Each customer As Customer In objCtx.CustomersWest
                    Console.WriteLine(customer.Name)

                    Dim totalOrderAmts As Decimal = 0
                    customer.OrdersWest.Load()

                    For Each order As OrderWest In customer.OrdersWest
                        Console.WriteLine( _
                                "Order: {0} Total: {1} Tax: {2}", _
                                order.OrderId, order.OrderTotal, _
                                order.Tax)

                        totalOrderAmts = totalOrderAmts + order.OrderTotal
                    Next

                    Console.WriteLine("Check totals: {0} <=> {1}", _
                        totalOrderAmts.ToString(), _
                        customer.TotalPurchases.ToString())
                Next

                ' Access Customer from Order.  For Each order As OrderEast In objCtx.OrdersEast
                    order.CustomerReference.Load()
                    Console.WriteLine("{0} Order Total: {1}", _
                        order.Customer.Name, order.OrderTotal.ToString())
                Next
            End Using
        Catch ex As Exception
            Console.WriteLine(ex.ToString())
        End Try
    End Sub
End Module  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RegionalCustomersModel;
using System.Data.Objects;

namespace ClientRegionalCustomers
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (RegionalCustomersEntities objCtx = 
                    new RegionalCustomersEntities())
                {

                    Console.WriteLine("Number of Customers East: " +
                            objCtx.CustomersEast.  Count<Customer>().ToString());

                    foreach (Customer customer in objCtx.CustomersEast)
                    {
                        Console.WriteLine(customer.Name);
                        customer.OrdersEast.Load();
                        decimal totalOrderAmts = 0;
                        foreach (OrderEast order in
                                               customer.OrdersEast)
                        {
                            Console.WriteLine(
                                "Order: {0} Total: {1} Tax: {2}",
                                order.OrderId,
                                order.OrderTotal,
                                order.Tax);
                            totalOrderAmts =
                                 totalOrderAmts + order.OrderTotal;
                        }

                        Console.WriteLine("Check totals: {0} <=> {1}",
                        totalOrderAmts.ToString(), 
                        customer.TotalPurchases.ToString());
                    }

                    Console.WriteLine("Number of Customers West: " +
                            objCtx.CustomersWest.  Count<Customer>().ToString());
                    
                    foreach (Customer customer in objCtx.CustomersWest)
                    {
                        Console.WriteLine(customer.Name);

                        decimal totalOrderAmts = 0;
                        customer.OrdersWest.Load();

                        foreach (OrderWest order in
                                               customer.OrdersWest)
                        {
                            Console.WriteLine(
                                "Order: {0} Total: {1} Tax: {2}",
                                order.OrderId,
                                order.OrderTotal,
                                order.Tax);

                            totalOrderAmts = totalOrderAmts + order.OrderTotal;
                        }

                        Console.WriteLine("Check totals: {0} <=> {1}",
                        totalOrderAmts.ToString(),
                        customer.TotalPurchases.ToString());
                    }

                     // Access Customer from Order.  foreach (OrderEast order in objCtx.OrdersEast)
                    {
                        order.CustomerReference.Load();
                        Console.WriteLine("{0} Order Total: {1}",
                            order.Customer.Name, 
                            order.OrderTotal.ToString() );
                        
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

        }
    }
}  

Siehe auch

Aufgaben

Gewusst wie: Definieren eines Modells mit mehreren Entitätenmengen pro Typ (Entity Framework)