EntityCollection<TEntity>.Load(MergeOption) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Charge les objets associés dans la collection à l’aide de l’option de fusion spécifiée.
public:
override void Load(System::Data::Objects::MergeOption mergeOption);
public override void Load(System.Data.Objects.MergeOption mergeOption);
override this.Load : System.Data.Objects.MergeOption -> unit
Public Overrides Sub Load (mergeOption As MergeOption)
Paramètres
- mergeOption
- MergeOption
Spécifie la façon dont les objets de cette collection doivent être fusionnés avec les objets qui ont peut-être été retournés par des requêtes précédentes sur le même ObjectContext.
Exemples
Cet exemple est basé sur le modèle de vente Adventure Works. Pour exécuter le code dans cet exemple, vous devez avoir déjà ajouté le modèle de vente AdventureWorks à votre projet et configuré votre projet pour utiliser Entity Framework. Pour ce faire, suivez les procédures de How to : Configurez manuellement entity Framework Project et How to : Define the Model and Mapping Files.
Cet exemple charge les objets associés SalesOrderHeader pour l’entité Contact .
// Specify the customer ID.
int contactID = 4332;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
context.ContextOptions.LazyLoadingEnabled = false;
// Get a specified customer by contact ID.
var contact =
(from c in context.Contacts
where c.ContactID == contactID
select c).First();
// Load the orders for the customer explicitly.
if (!contact.SalesOrderHeaders.IsLoaded)
{
contact.SalesOrderHeaders.Load();
}
foreach (SalesOrderHeader order in contact.SalesOrderHeaders)
{
// Load the items for the order if not already loaded.
if (!order.SalesOrderDetails.IsLoaded)
{
order.SalesOrderDetails.Load();
}
Console.WriteLine(String.Format("PO Number: {0}",
order.PurchaseOrderNumber));
Console.WriteLine(String.Format("Order Date: {0}",
order.OrderDate.ToString()));
Console.WriteLine("Order items:");
foreach (SalesOrderDetail item in order.SalesOrderDetails)
{
Console.WriteLine(String.Format("Product: {0} "
+ "Quantity: {1}", item.ProductID.ToString(),
item.OrderQty.ToString()));
}
}
}
Remarques
Cette méthode appelle la méthode interne RelatedEnd.ValidateLoad avant de charger la collection, ce qui valide qu’un appel a Load les conditions appropriées. La RelatedEnd.ValidateLoad méthode vérifie que :
- Il existe une valeur valide ObjectContext .
- L’entité n’est pas dans un Deleted état.
- MergeOption pour Load doit être NoTracking si et uniquement si l’entité source était NoTracking. Si l’entité source a été récupérée avec n’importe quel autre MergeOptionélément, elleLoadMergeOptionpeut être tout sauf NoTracking (par exemple, l’entité a pu être chargée OverwriteChanges et l’option Load peut êtreAppendOnly).
- Si
mergeOptionc’est NoTrackingle cas, Load n’est pas appelé sur une entité déjà chargée et Load n’est pas appelé sur une entité non vide, non suivie RelatedEnd.
Lorsque les objets de la collection sont déjà chargés dans la ObjectContextcollection, la Load méthode applique le MergeOption paramètre spécifié mergeOption . Pour plus d’informations, consultez Identity Resolution, State Management et Change Tracking.
Pour charger explicitement des objets associés, vous devez appeler la Load méthode à la fin associée retournée par la propriété de navigation. Pour une relation un-à-plusieurs, appelez la Load méthode sur EntityCollection<TEntity>. Pour une relation un-à-un, appelez le LoadEntityReference<TEntity>. Cela charge les données d’objet associées dans le contexte de l’objet. Vous pouvez énumérer la collection de résultats retournés à l’aide d’une boucle foreach (For Each...Next dans Visual Basic) et appeler conditionnellement la méthode Load sur EntityReference<TEntity> et EntityCollection<TEntity> pour chaque entité dans les résultats.
La Load méthode charge des objets connexes à partir de la source de données, qu’il s’agisse IsLoadedou nontrue.
Note
Lorsque vous appelez la Load méthode pendant une foreach énumération (C#) ou For Each (Visual Basic), Object Services tente d’ouvrir un nouveau lecteur de données. Cette opération échoue, sauf si vous avez activé plusieurs jeux de résultats actifs en spécifiant dans la chaîne de multipleactiveresultsets=true connexion. Vous pouvez également charger le résultat de la requête dans une List<T> collection. Cela ferme le lecteur de données et vous permet d’énumérer sur la collection pour charger des objets référencés.
La EntityCollection<TEntity>.Load méthode est synchronisée avec la EntityReference<TEntity>.Load méthode.