Procédure : exécuter une requête d'objets avec des jeux d'entités multiples par type (Entity Framework)
Une implémentation de jeux d'entités multiples par type (MEST) permet aux applications d'accéder à des données du même type à partir des différentes partitions utilisées dans le stockage. Le code de cette section montre comment accéder à un même type Customer dans deux collections distinctes retournées par la classe query<T> fournie par le contexte d'objet. Le code de cette rubrique utilise le modèle de données conçu dans la rubrique Procédure : définir un modèle avec jeux d'entités multiples par type (Entity Framework).
Pour configurer le projet et l'application à l'aide de jeux d'entités multiples par type
Créez un projet d'application console et ajoutez des références à System.Data.Entity et à System.Runtime.Serialization.
Ajoutez une référence à la DLL générée à partir du modèle de données défini dans la rubrique Procédure : définir un modèle avec jeux d'entités multiples par type (Entity Framework).
Ajoutez les schémas de la rubrique Procédure : définir un modèle avec jeux d'entités multiples par type (Entity Framework) au dossier dans lequel se trouve l'exécutable.
Ajoutez un fichier de configuration de l'application. La syntaxe suivante fournit un chemin d'accès aux métadonnées de schéma et une chaîne de connexion au serveur qui héberge les données.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="RegionalCustomersEntities"
connectionString="metadata=.;
provider=System.Data.SqlClient;
provider connection string="
Data Source=serverName;
Initial Catalog=RegionalCustomersMEST;
Integrated Security=True;
multipleactiveresultsets=true""
providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Exemple
L'exemple de code suivant utilise des jeux d'entités multiples par type. Utilisez ce code dans le fichier programme du projet.
Le type Customer est accessible à la fois à partir de la requête CustomersEast et de la requête CustomersWest dans l'exemple suivant.
L'exploration d'une association entre le client et une commande peut s'effectuer à partir de la terminaison OrderEast ou OrderWest de l'association ou à partir de la terminaison Customer.
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());
}
}
}
}
Voir aussi
Tâches
Procédure : définir un modèle avec jeux d'entités multiples par type (Entity Framework)