Я использую Entity Framework Profiler для проверки доступа к данным в проекте MVC и перебрал несколько страниц, где я делаю гораздо больше запросов к базе данных из-за проблем N + 1.
Вот простой пример, показывающий мою проблему:
var club = this.ActiveClub; // ActiveClub uses code similar to context.Clubs.First()
var members = club.Members.ToList();
return View("MembersWithAddress", members);
Представление проходит по элементам Member и затем следует свойству navigion для каждого участника, чтобы также показать их адрес.Каждый из запросов адреса приводит к дополнительному запросу в БД.
Один из способов решить эту проблему - использовать Включить, чтобы убедиться, что дополнительные таблицы, которые мне нужны, запрашиваются заранее.Тем не менее, я, кажется, могу сделать это только с помощью ObjectSet of Clubs, прикрепленной непосредственно к контексту.В этом случае свойство ActiveClub совместно используется многими контроллерами, и я не всегда хочу запрашивать член и таблицу адресов заранее.
Я бы хотел использовать что-то вроде:
var members = club.Members.Include("Address").ToList();
Но Members - это EntityCollection, и в нем нет метода Include.
Есть ли способ принудительно загрузить член EntityCollection и попросить EF также загрузить их адреса??
Или, используя таким образом свойства навигации EntityCollection для сущности, просто очень плохая идея;и вы должны знать, что вы загружаете, когда получаете его из контекста?