Позвольте мне рассказать вам немного об EF, чтобы вы могли понять, как это работает.EF с первого дня поддерживал только явную загрузку, как показано ниже
Customer.Orders.Load();
Хмм, обратная связь не приветствовалась сообществом, и разработчики хотели ленивую загрузку.Для поддержки Lazy Loading EF команда сказала, что вы должны пометить ваше свойство навигации как виртуальное.Поэтому во время выполнения Ef создает прокси-объект, который наследуется от вашей сущности и переопределяет виртуальное свойство.Ниже приведен пример такого кода.
public class Customer
{
public string Name{get;set;}
public virtual ICollection<Order> Orders{get;set;}
}
Во время выполнения есть прокси-сервер, который реализует IEntityWithChangeTracker, а конкретный тип коллекции - это коллекция объектов, существующая с версии 1.
public class CustomerProxy:Customer,IEntityWithChangeTracker
{
private ICollection<Order> orders;
public override ICollection<Order> Orders
{
if(orders == null)
{
orders = new EntityCollection<Order>();
orders.Load();
}
return orders;
}
}