Ответ 1
Предположим, что у вас есть два объекта с отношением "один ко многим": клиент и заказ, где каждый клиент может иметь несколько ордеров.
При загрузке объекта Customer Entity Framework позволяет либо загружать, либо лениво загружать коллекцию заказов клиентов. Если вы решите загружать коллекцию "Заказы", когда вы извлекаете клиента из базы данных, Entity Framework будет генерировать SQL, который извлекает как клиентскую информацию, так и заказы клиентов в одном запросе. Однако, если вы решите использовать ленивую загрузку коллекции заказов, когда вы выберете клиента из базы данных, Entity Framework будет генерировать SQL, который извлекает только информацию о клиенте (Entity Framework затем генерирует отдельный оператор SQL, если позже вы получите доступ к коллекции заказов клиентов в вашем коде).
Определение того, когда использовать загружаемую загрузку и когда использовать ленивую загрузку, сводится к тому, что вы ожидаете делать с получаемыми вами объектами. Если вы знаете, что вам нужна только информация о клиенте, тогда вам нужно lazy загрузить коллекцию Orders (чтобы SQL-запрос мог быть эффективным, только получая информацию о клиенте). И наоборот, если вы знаете, что вам нужно пройти через заказы клиентов, тогда вы должны с нетерпением загрузить Заказы (так что вы сэкономите себе дополнительный бат, когда вы получите доступ к заказам клиентов в своем коде).
P.S. Будьте осторожны при использовании ленивой загрузки, так как это может привести к проблеме N + 1. Например, скажем, у вас есть страница, на которой отображается список клиентов и их заказы. Тем не менее, вы решили использовать ленивую загрузку при получении заказов. Когда вы перебираете коллекцию Клиентов, то над каждым Заказом Клиента вы будете выполнять попадание базы данных для каждого Клиента в ленивую загрузку в их коллекции Заказов. Это означает, что для клиентов N вы получите хиты базы данных N + 1 (1 база данных ударила, чтобы загрузить всех Клиентов, а затем N баз данных попадает для загрузки каждого из своих ордеров), а не только с одним ударом базы данных, если бы вы использовали активную загрузку (который мог бы получить всех Клиентов и их Заказы в одном запросе).