EntityCollection<TEntity>.Load(MergeOption) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Carica gli oggetti correlati nella raccolta utilizzando l'opzione di unione specificata.
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)
Parametri
- mergeOption
- MergeOption
Specifica il modo in cui gli oggetti in questa raccolta devono essere uniti agli oggetti che potrebbero essere stati restituiti dalle query precedenti sullo stesso ObjectContext.
Esempio
Questo esempio è basato sul modello Adventure Works Sales. Per eseguire il codice in questo esempio, è necessario aver già aggiunto il modello AdventureWorks Sales al progetto e configurato il progetto per l'uso di Entity Framework. A tale scopo, completare le procedure descritte in Procedura: Configurare manualmente un progetto Entity Framework e Procedura: Definire manualmente i file di modello e mapping.
In questo esempio vengono caricati gli oggetti SalesOrderHeader
correlati per 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()));
}
}
}
Commenti
Questo metodo chiama il metodo RelatedEnd.ValidateLoad
interno prima di caricare la raccolta, che convalida che una chiamata a Load abbia le condizioni corrette. Il metodo RelatedEnd.ValidateLoad
verifica che:
- Esiste un ObjectContext valido.
- L'entità non è in uno stato Deleted.
- MergeOption per Load deve essere NoTracking se e solo se l'entità di origine è NoTracking. Se l'entità di origine è stata recuperata con qualsiasi altra MergeOption, il LoadMergeOption può essere qualsiasi cosa, ma NoTracking ( ad esempio, l'entità potrebbe essere stata caricata con OverwriteChanges e l'opzione Load può essere AppendOnly).
- Se
mergeOption
è NoTracking, Load non viene chiamato su un'entità già caricata e Load non viene chiamato in un RelatedEndnon vuoto e non monitorato.
Quando gli oggetti nell'insieme sono già caricati nella ObjectContext, il metodo Load applica il MergeOption specificato dal parametro mergeOption
. Per altre informazioni, vedere Identity Resolution, State Management e Change Tracking.
Per caricare in modo esplicito gli oggetti correlati, è necessario chiamare il metodo Load
sulla fine correlata restituita dalla proprietà di navigazione. Per una relazione uno-a-molti, chiamare il metodo Load in EntityCollection<TEntity>. Per una relazione uno-a-uno, chiamare il Load in EntityReference<TEntity>. In questo modo i dati dell'oggetto correlati vengono caricati nel contesto dell'oggetto. È possibile enumerare tramite la raccolta di risultati restituiti usando un ciclo foreach
(For Each...Next
in Visual Basic) e chiamare in modo condizionale il metodo Load
su EntityReference<TEntity> e le proprietà EntityCollection<TEntity> per ogni entità nei risultati.
Il metodo Load carica gli oggetti correlati dall'origine dati indipendentemente dal fatto che IsLoaded sia true
.
Nota
Quando si chiama il metodo Load durante un'enumerazione foreach
(C#) o For Each
(Visual Basic), Object Services tenta di aprire un nuovo lettore dati. Questa operazione avrà esito negativo a meno che non siano stati abilitati più set di risultati attivi specificando multipleactiveresultsets=true
nella stringa di connessione. È anche possibile caricare il risultato della query in una raccolta di List<T>. Chiude il lettore dati e consente di enumerare la raccolta per caricare gli oggetti a cui si fa riferimento.
Il metodo EntityCollection<TEntity>.Load viene sincronizzato con il metodo EntityReference<TEntity>.Load.