@ Slauma ответ правильный - вся коллекция загружается при первом обращении к свойству навигации.Так должно быть с "обычными" свойствами навигации, потому что коллекция - это просто обычная коллекция ICollection <>, а не IQueryable <>.
Однако есть две вещи, которые вы можете сделать, если не хотитевся коллекция загружена.Если у вас есть доступный контекст, вы можете использовать метод Query для ленивой загрузки.Например:
foreach (var role in context.Entry(user).Collection(e => e.Roles).Query())
{
Console.WriteLine(role.Name);
if (role.Name == "Role1")
break;
}
Вы можете пойти немного дальше, если заранее знаете, какую сущность вы ищете.Например, чтобы загрузить только Role1, вы можете сделать:
var role1 = context.Entry(user)
.Collection(e => e.Roles)
.Query()
.Single(r => r.Name == "Role1");
В этом посте содержится более подробная информация о методе запроса:
http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx
Если вы хотитесделайте это более прозрачным, чтобы вам не требовался контекст, доступный при выполнении запроса, а затем ознакомьтесь с этими постами в блоге, в которых объясняется, как создавать лишние ленивые коллекции:
http://blog.oneunicorn.com/2011/03/28/extra-lazy-collection-count-with-ef-4-1-part-1/
и более общие коллекции с IQueryable-поддержкой:
http://blog.oneunicorn.com/2011/03/30/a-more-general-queryable-collection/