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 mit demselben 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 entität Contact
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 auf, bevor die Auflistung geladen wird, wodurch überprüft wird, ob ein Aufruf von Load die richtigen Bedingungen aufweist. Die RelatedEnd.ValidateLoad
-Methode überprüft Folgendes:
- Es ist ein gültiger ObjectContext vorhanden.
- Die Entität befindet sich nicht in einem Deleted Zustand.
- MergeOption für Load muss nur dann NoTracking werden, wenn die Quellentität NoTrackingwurde. Wenn die Quellentität mit einem anderen MergeOptionabgerufen wurde, kann die LoadMergeOption alles andere als NoTracking sein (z. B. könnte die Entität mit OverwriteChanges geladen worden sein, und die Option Load kann AppendOnlysein).
- Wenn
mergeOption
NoTrackingist, wird Load nicht für eine bereits geladene Entität aufgerufen, und Load wird nicht für ein nicht leeres, nicht nachverfolgtes RelatedEndaufgerufen.
Wenn Objekte in der Auflistung bereits in den ObjectContextgeladen werden, erzwingt die Load Methode die durch den parameter mergeOption
angegebene MergeOption. 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 für EntityCollection<TEntity>auf. Rufen Sie für eine 1:1-Beziehung die Load für EntityReference<TEntity>auf. Dadurch werden die zugehörigen Objektdaten in den Objektkontext geladen. Sie können die Auflistung zurückgegebener Ergebnisse mithilfe einer foreach
Schleife (For Each...Next
in Visual Basic) durchlaufen 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 IsLoadedtrue
ist.
Anmerkung
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 multipleactiveresultsets=true
in der Verbindungszeichenfolge angeben. Sie können das Ergebnis der Abfrage auch in eine List<T>-Auflistung 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.