When you use the LoadWith method, it is not allowed to specify the loading of two levels of relationships (e.g, Orders.OrderDetails). In these scenarios you must specify two separate LoadWith methods.
In the following example, all the Orders and OrderDetails for all the Customers who are located in Germany are retrieved when the query is executed. As a result, successive access to the Orders property on a Customer object does not trigger a new database query.
| C# |
Copy Code |
|
using (NorthwindDbContext dbContext = new NorthwindDbContext()) { Telerik.OpenAccess.FetchOptimization.FetchStrategy fetchStrategy = new Telerik.OpenAccess.FetchOptimization.FetchStrategy(); fetchStrategy.LoadWith<Customer>(c => c.Orders); fetchStrategy.LoadWith<Order>(o => o.OrderDetails);
dbContext.FetchStrategy = fetchStrategy;
IQueryable<Customer> query = from c in dbContext.Customers where c.Country == "Germany" select c;
foreach (Customer customer in query) { Console.WriteLine("Customer Id: {0}", customer.CustomerID); foreach (Order order in customer.Orders) { Console.WriteLine("===Order date: {0}", order.OrderDate.ToString()); foreach (OrderDetail orderDetail in order.OrderDetails) { Console.WriteLine("======Unit price: {0}", orderDetail.UnitPrice.ToString("c")); } } } } |
| VB.NET |
Copy Code |
|
Using dbContext As New NorthwindDbContext() Dim fetchStrategy As New Telerik.OpenAccess.FetchOptimization.FetchStrategy() fetchStrategy.LoadWith(Of Customer)(Function(c) c.Orders) fetchStrategy.LoadWith(Of Order)(Function(o) o.OrderDetails)
dbContext.FetchStrategy = fetchStrategy
Dim query As IQueryable(Of Customer) = From c In dbContext.Customers Where c.Country = "Germany" Select c
For Each customer_Renamed As Customer In query Console.WriteLine("Customer Id: {0}", customer_Renamed.CustomerID) For Each order_Renamed As Order In customer_Renamed.Orders Console.WriteLine("===Order date: {0}", order_Renamed.OrderDate.ToString()) For Each orderDetail_Renamed As OrderDetail In order_Renamed.OrderDetails Console.WriteLine("======Unit price: {0}", orderDetail_Renamed.UnitPrice.ToString("c")) Next orderDetail_Renamed Next order_Renamed Next customer_Renamed End Using |
Alternatively, you can use the second overload of the LoadWith<T> method, accepting an array of expression in the following manner.
| C# |
Copy Code |
|
fetchStrategy.LoadWith<Order>(c => c.OrderDetails, c => c.Customer); |
| VB.NET |
Copy Code |
|
fetchStrategy.LoadWith(Of Order)(Function(c) c.OrderDetails, Function(c) c.Customer) |
See Also