Join GitHub today
NO LONGER SUPPORTED SINCE 2015
IMPORTANT: This library is no longer supported since 2015. We highly recommend you to move to Entity Framework Plus.
Future queries are created with the following extension methods...
// build up queries var q1 = db.Users .Where(t => t.EmailAddress == "firstname.lastname@example.org") .Future(); var q2 = db.Tasks .Where(t => t.Summary == "Test") .Future(); // this triggers the loading of all the future queries var users = q1.ToList();
In the example above, there are 2 queries built up, as soon as one of the queries is enumerated, it triggers the batch load of both queries.
// base query var q = db.Tasks.Where(t => t.Priority == 2); // get total count var q1 = q.FutureCount(); // get page var q2 = q.Skip(pageIndex).Take(pageSize).Future(); // triggers execute as a batch int total = q1.Value; var tasks = q2.ToList();
In this example, we have a common senerio where you want to page a list of tasks. In order for the GUI to setup the paging control, you need a total count. With Future, we can batch together the queries to get all the data in one database call.
Future queries work by creating the appropriate IFutureQuery object that keeps the IQuerable. The IFutureQuery object is then stored in IFutureContext.FutureQueries list. Then, when one of the IFutureQuery objects is enumerated, it calls back to IFutureContext.ExecuteFutureQueries() via the LoadAction delegate. ExecuteFutureQueries builds a batch query from all the stored IFutureQuery objects. Finally, all the IFutureQuery objects are updated with the results from the query.