Código do Entity Framework First Lazy Loading

Eu estou tendo duas classes de objetos

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    // Navigation
    public ICollection<Product> Products { get; set; }
}

public class Product
{
    public Guid Id { get; set; }

    // Navigation
    public User User { get; set; }
    public Guid User_Id { get; set; }

    public string Name { get; set; }
}

Quando eu carregar um usuário usando dataContext, eu recebo a lista de produtos sendo nulos (isso é ok).

Se eu adicionar a palavra-chave "virtual" à lista de produtos,

public virtual ICollection<Product> Products { get; set; }

quando eu carrego o usuário, eu recebo a lista de produtos também.

Por que isso está acontecendo? Eu pensei que a palavra-chave "virtual" é usada para não carregar as entidades, a menos que você explique isso (usando uma instrução "Incluir")

Eu acho que entendi tudo errado

questionAnswers(2)

yourAnswerToTheQuestion