EntityCollection<TEntity>.Load(MergeOption) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Läser in relaterade objekt i samlingen med det angivna kopplingsalternativet.
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)
Parametrar
- mergeOption
- MergeOption
Anger hur objekten i den här samlingen ska sammanfogas med de objekt som kan ha returnerats från tidigare frågor mot samma ObjectContext.
Exempel
Det här exemplet baseras på Adventure Works försäljningsmodell. Om du vill köra koden i det här exemplet måste du redan ha lagt till AdventureWorks Sales Model i projektet och konfigurerat projektet för att använda Entity Framework. Det gör du genom att utföra procedurerna i Så här: Konfigurera ett Entity Framework-Project och Så här: Definiera modell- och mappningsfiler manuellt.
Det här exemplet läser in relaterade SalesOrderHeader objekt för entiteten 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()));
}
}
}
Kommentarer
Den här metoden anropar den interna RelatedEnd.ValidateLoad metoden innan samlingen läses in, vilket verifierar att ett anrop till Load har rätt villkor. Metoden RelatedEnd.ValidateLoad kontrollerar att:
- Det finns ett giltigt ObjectContext .
- Entiteten är inte i ett Deleted tillstånd.
- MergeOption för Load måste vara NoTracking om och endast om källentiteten var NoTracking. Om källentiteten hämtades med någon annan MergeOptionkan det LoadMergeOption vara allt annat NoTracking än (till exempel kunde entiteten ha lästs in med OverwriteChanges och Load alternativet kan vara AppendOnly).
- Om
mergeOptionär NoTrackinganropas Load inte på en redan inläst entitet och Load anropas inte på en icke-tom, inte spårad RelatedEnd.
När objekt i samlingen redan har lästs in i ObjectContextLoad tillämpar metoden den MergeOption som anges av parameternmergeOption. Mer information finns i Identitetsmatchning, Tillståndshantering och Ändringsspårning.
För att uttryckligen läsa in relaterade objekt måste du anropa Load metoden i den relaterade änden som returneras av navigeringsegenskapen. För en en-till-många-relation anropar du metoden på LoadEntityCollection<TEntity>. För en en-till-en-relation anropar du på LoadEntityReference<TEntity>. Detta läser in relaterade objektdata i objektkontexten. Du kan räkna upp en samling returnerade resultat med hjälp av en foreach-loop (For Each...Next i Visual Basic) och villkorligt anropa metoden Load på EntityReference<TEntity> och EntityCollection<TEntity> egenskaper för varje entitet i resultatet.
Metoden Load läser in relaterade objekt från datakällan oavsett om IsLoaded det är true.
Note
När du anropar metoden Load under en foreach (C#) eller For Each (Visual Basic) försöker Object Services öppna en ny dataläsare. Den här åtgärden misslyckas om du inte har aktiverat flera aktiva resultatuppsättningar genom att ange multipleactiveresultsets=true i reťazec pripojenia. Du kan också läsa in resultatet av frågan i en List<T> samling. Detta stänger dataläsaren och gör att du kan räkna upp över samlingen för att läsa in refererade objekt.
Metoden EntityCollection<TEntity>.Load synkroniseras med EntityReference<TEntity>.Load -metoden.