Telerik OpenAccess ORM

Telerik OpenAccess ORM Send comments on this topic.
How to: Use Multiple Fetch Definitions
See Also
Programmer's Guide > Developer's Guide > CRUD Operations > Defining Fetch Plans > How to: Use Multiple Fetch Definitions

Glossary Item Box

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