EntityCollection<TEntity>.Load(MergeOption) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee worden gerelateerde objecten in de verzameling geladen met behulp van de opgegeven optie voor samenvoegen.
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)
Parameters
- mergeOption
- MergeOption
Hiermee geeft u op hoe de objecten in deze verzameling moeten worden samengevoegd met de objecten die mogelijk zijn geretourneerd uit eerdere query's op hetzelfde ObjectContext.
Voorbeelden
Dit voorbeeld is gebaseerd op het Adventure Works-verkoopmodel. Als u de code in dit voorbeeld wilt uitvoeren, moet u het AdventureWorks-verkoopmodel al aan uw project hebben toegevoegd en uw project zo configureren dat het Entity Framework wordt gebruikt. U doet dit door de procedures in Hoe u dit doet: Handmatig een Entity Framework-Project en Aanvullen: Handmatig het model en toewijzingsbestanden definiƫren.
In dit voorbeeld worden de gerelateerde SalesOrderHeader objecten voor de Contact entiteit geladen.
// 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()));
}
}
}
Opmerkingen
Met deze methode wordt de interne RelatedEnd.ValidateLoad methode aangeroepen voordat de verzameling wordt geladen, waarmee wordt gevalideerd of een aanroep naar Load de juiste voorwaarden beschikt. De RelatedEnd.ValidateLoad methode controleert dat:
- Er bestaat een geldige ObjectContext waarde.
- De entiteit heeft geen Deleted status.
- MergeOptionmoet Load zijn NoTracking als en alleen als de bronentiteit .NoTracking Als de bronentiteit met een andere MergeOptionis opgehaald, kan het LoadMergeOption iets anders NoTracking zijn dan (de entiteit kan bijvoorbeeld zijn geladen met OverwriteChanges en de Load optie kan zijn AppendOnly).
- Als
mergeOptiondat het is NoTracking, Load wordt deze niet aangeroepen op een al geladen entiteit en Load wordt deze niet aangeroepen op een niet-lege, niet-bijgehouden RelatedEndentiteit.
Wanneer objecten in de verzameling al in de ObjectContextverzameling zijn geladen, dwingt de Load methode de MergeOption opgegeven door de mergeOption parameter af. Zie Identiteitsomzetting, Statusbeheer en Wijzigingen bijhouden voor meer informatie.
Als u gerelateerde objecten expliciet wilt laden, moet u de Load methode aanroepen op het gerelateerde einde dat wordt geretourneerd door de navigatie-eigenschap. Voor een een-op-veel-relatie roept u de Load methode aan.EntityCollection<TEntity> Voor een een-op-een-relatie roept u het Load aan EntityReference<TEntity>. Hiermee worden de gerelateerde objectgegevens in de objectcontext geladen. U kunt de verzameling geretourneerde resultaten inventariseren met behulp van een foreach lus (For Each...Next in Visual Basic) en de methode Load voorwaardelijk aanroepen op EntityReference<TEntity> en EntityCollection<TEntity> eigenschappen voor elke entiteit in de resultaten.
Met Load de methode worden gerelateerde objecten uit de gegevensbron geladen, ongeacht of dit wel of niet IsLoaded het is true.
Note
Wanneer u de methode Load aanroept tijdens een opsomming foreach (C#) of For Each (Visual Basic), probeert Object Services een nieuwe gegevenslezer te openen. Deze bewerking mislukt, tenzij u meerdere actieve resultatensets hebt ingeschakeld door multipleactiveresultsets=true op te geven in de verbindingsreeks. U kunt ook het resultaat van de query in een List<T> verzameling laden. Hiermee sluit u de gegevenslezer en kunt u de verzameling opsommen om objecten te laden waarnaar wordt verwezen.
De EntityCollection<TEntity>.Load methode wordt gesynchroniseerd met de EntityReference<TEntity>.Load methode.