EntityCollection<TEntity>.Load(MergeOption) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Lädt verwandte Objekte in die Auflistung mit der angegebenen Zusammenführungsoption.
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)
Parameter
- mergeOption
- MergeOption
Gibt an, wie die Objekte in dieser Auflistung mit den Objekten zusammengeführt werden sollen, die möglicherweise aus vorherigen Abfragen für dasselbe ObjectContextzurückgegeben wurden.
Beispiele
Dieses Beispiel basiert auf dem Adventure Works-Vertriebsmodell. Um den Code in diesem Beispiel auszuführen, müssen Sie ihrem Projekt bereits das AdventureWorks Sales Model hinzugefügt und ihr Projekt so konfiguriert haben, dass es das Entity Framework verwendet. Führen Sie dazu die Verfahren in How to: Manually Configure an Entity Framework Project and How to: Manually Define the Model and Mapping Files.
In diesem Beispiel werden die zugehörigen SalesOrderHeader Objekte für die Contact Entität 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()));
}
}
}
Hinweise
Diese Methode ruft die interne RelatedEnd.ValidateLoad Methode vor dem Laden der Auflistung auf, wodurch überprüft wird, ob ein Aufruf Load über die richtigen Bedingungen verfügt. Die RelatedEnd.ValidateLoad Methode überprüft Folgendes:
- Es ist ein gültiger ObjectContext Wert vorhanden.
- Die Entität befindet sich nicht in einem Deleted Zustand.
- MergeOption Load for must be NoTracking if and only if and only if the source entity was NoTracking. Wenn die Quellentität mit einer anderen MergeOptionEntität abgerufen wurde, kann esLoadMergeOptionsich um etwas handeln, das jedoch NoTracking möglich ist (z. B. könnte die Entität geladen OverwriteChanges worden sein und die Load Option kann seinAppendOnly).
- Ist
mergeOptiondies NoTrackingder Fehler , Load wird nicht für eine bereits geladene Entität aufgerufen und Load wird nicht für eine nicht leere, nicht nachverfolgte RelatedEndEntität aufgerufen.
Wenn Objekte in der Auflistung bereits in die ObjectContextAuflistung geladen werden, erzwingt die Load Methode den MergeOption durch den mergeOption Parameter angegebenen Wert. Weitere Informationen finden Sie unter Identitätsauflösung, Zustandsverwaltung und Änderungsnachverfolgung.
Um verwandte Objekte explizit zu laden, müssen Sie die Load Methode für das zugehörige Ende aufrufen, das von der Navigationseigenschaft zurückgegeben wird. Rufen Sie für eine 1:n-Beziehung die Load Methode auf EntityCollection<TEntity>. Rufen Sie für eine 1:1-Beziehung die Ein Load -/Aus-Verbindung auf EntityReference<TEntity>. Dadurch werden die zugehörigen Objektdaten in den Objektkontext geladen. Sie können die Auflistung der zurückgegebenen Ergebnisse mithilfe einer foreachschleife (For Each...Next in Visual Basic) aufzählen und die Load-Methode für EntityReference<TEntity> und EntityCollection<TEntity> Eigenschaften für jede Entität in den Ergebnissen bedingt aufrufen.
Die Load Methode lädt verwandte Objekte aus der Datenquelle, unabhängig davon, ob dies der IsLoaded Wert ist true.
Note
Wenn Sie die Load Methode während einer foreach (C#)- oder For Each (Visual Basic)-Aufzählung aufrufen, versucht Object Services, einen neuen Datenleser zu öffnen. Dieser Vorgang schlägt fehl, es sei denn, Sie haben mehrere aktive Resultsets aktiviert, indem Sie in der Verbindungszeichenfolge angeben multipleactiveresultsets=true . Sie können auch das Ergebnis der Abfrage in eine List<T> Sammlung laden. Dadurch wird der Datenleser geschlossen, und Sie können die Auflistung aufzählen, um referenzierte Objekte zu laden.
Die EntityCollection<TEntity>.Load Methode wird mit der EntityReference<TEntity>.Load Methode synchronisiert.