EntityCollection<TEntity>.Load(MergeOption) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Načte související objekty do kolekce pomocí zadané možnosti sloučení.
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)
Parametry
- mergeOption
- MergeOption
Určuje způsob sloučení objektů v této kolekci s objekty, které mohly být vráceny z předchozích dotazů proti stejné ObjectContext.
Příklady
Tento příklad je založený na prodejním modelu Adventure Works. Pokud chcete kód spustit v tomto příkladu, musíte už do projektu přidat model AdventureWorks Sales Model a nakonfigurovat ho tak, aby používal Entity Framework. Chcete-li to provést, dokončete postupy v Postupy: Ruční konfigurace projektu Entity Framework a Postupy: Ruční definování modelu a mapování souborů.
Tento příklad načte související SalesOrderHeader
objekty pro entitu 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()));
}
}
}
Poznámky
Tato metoda volá interní metodu RelatedEnd.ValidateLoad
před načtením kolekce, která ověří, že volání Load má správné podmínky. Metoda RelatedEnd.ValidateLoad
zkontroluje, že:
- Existuje platný ObjectContext.
- Entita není ve stavu Deleted.
- MergeOption pro Load musí být NoTracking, pokud byla zdrojová entita NoTracking. Pokud byla zdrojová entita načtena s jinými MergeOption, může být LoadMergeOption cokoli, ale NoTracking (entita mohla být načtena s OverwriteChanges a možnost Load může být AppendOnly).
- Pokud je
mergeOption
NoTracking, Load není volána u již načtené entity a Load není volána na neprázdné, nesledované RelatedEnd.
Pokud jsou objekty v kolekci již načteny do ObjectContext, metoda Load vynucuje MergeOption určené parametrem mergeOption
. Další informace najdete v tématu řešení identit, správy stavu a sledování změn.
Chcete-li explicitně načíst související objekty, je nutné volat Load
metodu na souvisejícím konci vrácenou navigační vlastností. Pro relaci 1:N volejte metodu Load pro EntityCollection<TEntity>. U relace 1:1 zavolejte Load na EntityReference<TEntity>. Tím se načte související data objektu do kontextu objektu. Pomocí smyčky foreach
(For Each...Next
v jazyce Visual Basic) můžete vypsat kolekci vrácených výsledků a podmíněně volat metodu Load
pro EntityReference<TEntity> a EntityCollection<TEntity> vlastnosti pro každou entitu ve výsledcích.
Metoda Load načte související objekty ze zdroje dat bez ohledu na to, zda IsLoaded je true
.
Poznámka
Když voláte metodu Load během výčtu foreach
(C#) nebo For Each
(Visual Basic), služba Object Services se pokusí otevřít novou čtečku dat. Tato operace selže, pokud jste nepovolili více aktivních sad výsledků zadáním multipleactiveresultsets=true
v připojovacím řetězci. Výsledek dotazu můžete také načíst do kolekce List<T>. Tím se čtečka dat zavře a umožní vám vytvořit výčet nad kolekcí, aby se načetly odkazované objekty.
Metoda EntityCollection<TEntity>.Load se synchronizuje s metodou EntityReference<TEntity>.Load.