La sintassi offerta out of the box da Entity Framework 1.0 per impostare il fetch plan è, essendo basata sull'uso di semplici stringhe, prona ad errori poichè, ad esempio, il cambio del nome di una proprietà in una entità del domain model comporterà il fallimento di tutti i fetch plan che referenziano la suddetta proprietà. E' però possibile, avvalendosi degli extension methods, implementare anche per questo O/RM una sintassi "type safe" simile a quella offerta da LINQ 2 SQL. La seguente classe:
public static class ObjectQueryExtensions
{
public static ObjectQuery<T> Include<T>(this ObjectQuery<T> query, Expression<Func<T, object>> subSelector)
{
return query.Include(((subSelector.Body as MemberExpression).Member as PropertyInfo).Name);
}
}
Permetterà di impostare (ipotizzando una classe Order che esponga una proprietà Items di tipo IList<OrderItem>) il fetch plan con la sintassi:
ObjectQuery<Order> query = domain.OrderSet.Include(o => o.Items);
IList<Order> orders = (from o in query select o).ToList();