EntityCollection<TEntity>.Load(MergeOption) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Ładuje powiązane obiekty do kolekcji przy użyciu określonej opcji scalania.
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
Określa sposób scalania obiektów w tej kolekcji z obiektami, które mogły zostać zwrócone z poprzednich zapytań względem tego samego ObjectContextobiektu .
Przykłady
Ten przykład jest oparty na modelu Adventure Works Sales Model. Aby uruchomić kod w tym przykładzie, musisz już dodać model AdventureWorks Sales Do projektu i skonfigurować projekt do korzystania z programu Entity Framework. Aby to zrobić, wykonaj procedury opisane w temacie Instrukcje: Ręczne konfigurowanie projektu platformy Entity Framework i Instrukcje: Ręczne definiowanie modelu i plików mapowania.
W tym przykładzie ładuje powiązane SalesOrderHeader
obiekty dla Contact
jednostki.
// 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()));
}
}
}
Uwagi
Ta metoda wywołuje metodę wewnętrzną RelatedEnd.ValidateLoad
przed załadowaniem kolekcji, która sprawdza, czy wywołanie Load metody ma poprawne warunki. Metoda RelatedEnd.ValidateLoad
sprawdza, czy:
- Istnieje prawidłowa ObjectContext wartość.
- Jednostka nie jest w Deleted stanie .
- MergeOption dla Load musi mieć NoTracking wartość if i tylko wtedy, gdy jednostka źródłowa to NoTracking. Jeśli jednostka źródłowa została pobrana z dowolnym innym MergeOptionelementem , może to być dowolny element ,MergeOptionLoadale NoTracking (na przykład jednostka mogła zostać załadowana za pomocą OverwriteChanges polecenia , a Load opcja może mieć AppendOnlywartość ).
- Jeśli
mergeOption
parametr ma NoTrackingwartość , Load nie jest wywoływany dla już załadowanej jednostki i Load nie jest wywoływany w niepustej, nie śledzonej RelatedEndjednostce .
Gdy obiekty w kolekcji są już ładowane do ObjectContextklasy , Load metoda wymusza MergeOption określony przez mergeOption
parametr . Aby uzyskać więcej informacji, zobacz Identity Resolution, State Management i Change Tracking.
Aby jawnie załadować powiązane obiekty, należy wywołać metodę Load
na powiązanym końcu zwróconym przez właściwość nawigacji. W przypadku relacji jeden do wielu wywołaj metodę Load w metodzie .EntityCollection<TEntity> W przypadku relacji jeden do jednego wywołaj metodę Load w dniu EntityReference<TEntity>. Spowoduje to załadowanie powiązanych danych obiektu do kontekstu obiektu. Możesz wyliczyć za pomocą kolekcji zwróconych wyników przy użyciu foreach
pętli (For Each...Next
w języku Visual Basic) i warunkowo wywołać Load
metodę on EntityReference<TEntity> i EntityCollection<TEntity> właściwości dla każdej jednostki w wynikach.
Metoda Load ładuje powiązane obiekty ze źródła danych, niezależnie od tego, czy IsLoaded jest to true
.
Uwaga
Podczas wywoływania Load metody podczas foreach
wyliczania (C#) lub For Each
(Visual Basic) usługi Object Services próbują otworzyć nowy czytnik danych. Ta operacja zakończy się niepowodzeniem, chyba że włączono wiele aktywnych zestawów wyników, określając multipleactiveresultsets=true
w parametry połączenia. Możesz również załadować wynik zapytania do List<T> kolekcji. Spowoduje to zamknięcie czytnika danych i umożliwi wyliczanie kolekcji w celu załadowania obiektów, do których odwołuje się odwołanie.
Metoda EntityCollection<TEntity>.Load jest synchronizowana z EntityReference<TEntity>.Load metodą .
Dotyczy
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla