Instrukcje: kontrolowanie, ile jest pobieranych powiązanych danych
LoadWith Użyj metody , aby określić, które dane związane z głównym celem powinny być pobierane w tym samym czasie. Jeśli na przykład wiesz, że potrzebujesz informacji o zamówieniach klientów, możesz użyć LoadWith polecenia , aby upewnić się, że informacje o zamówieniu są pobierane w tym samym czasie co informacje o kliencie. Takie podejście powoduje tylko jedną podróż do bazy danych dla obu zestawów informacji.
Uwaga
Dane związane z głównym celem zapytania można pobrać, pobierając produkt krzyżowy jako jedną dużą projekcję, taką jak pobieranie zamówień w przypadku klientów docelowych. Jednak takie podejście często ma wady. Na przykład wyniki to tylko projekcje, a nie jednostki, które można zmienić i utrwały przez LINQ to SQL. Możesz też pobierać wiele danych, których nie potrzebujesz.
Przykład
W poniższym przykładzie wszystkie Orders
elementy dla wszystkich Customers
, którzy znajdują się w Londynie, są pobierane po wykonaniu zapytania. W związku z tym kolejny dostęp do Orders
właściwości obiektu Customer
nie powoduje wyzwolenia nowego zapytania bazy danych.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;
var londonCustomers =
from cust in db.Customers
where cust.City == "London"
select cust;
foreach (var custObj in londonCustomers)
{
Console.WriteLine(custObj.CustomerID);
}
Dim db As New Northwnd("c:\northwnd.mdf")
Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.LoadWith(Of Customer)(Function(c As Customer) c.Orders)
db.LoadOptions = dlo
Dim londonCustomers = _
From cust In db.Customers _
Where cust.City = "London" _
Select cust
For Each custObj In londonCustomers
Console.WriteLine(custObj.CustomerID)
Next