You have some things to consider when choosing between the Load and Include methods. Although the Load method may require additional round trips to the server, the Include method may result in a large amount of data being streamed back to the client application and then processed as the data is materialized into objects. This would be especially problematic if you are doing all of this work to retrieve related data that may never even be used. As is true with many choices in programming, this is a balancing act that you need to work out based on your particular scenario. The documentation also warns that using query paths with Include could result in very complex queries at the data store because of the possible need to use numerous joins. The more complex the model, the more potential there is for trouble.

You could certainly balance the pros and cons by combining the two methods. For example, you can load the customers and orders with Include and then pull in the order details on an as-needed basis with Load. The correct choice will most likely change on a case-by-case basis.

public static void DeferredLoadingEntityReference()
{
    var addresses = from a in context.Addresses select a;
    foreach (var address in addresses)
    {
        if (address.CountryRegion == "UK")
            address.ContactReference.Load();
    }
}


public static void EagerLoadWithInclude()
{
    var test = from c in context.Contacts.Include("Addresses")
               where c.LastName == "Smith"
               select c;
    test.OuputTrace();
}