EF codefirst: я должен инициализировать свойства навигации?

Я видел несколько книг (например,фреймворк программирования кода сначала Юлия Лерман) определить свои доменные классы (POCO) без инициализации свойств навигации, таких как:

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }

    public virtual ICollection<Address> Address { get; set; }
    public virtual License License { get; set; }
}

некоторые другие книги или инструменты (например,Entity Framework Power Tools) когда генерирует POCO, инициализирует навигационные свойства класса, например:

public class User
{
    public User()
    {
        this.Addresses = new IList<Address>();
        this.License = new License();
    }
    public int Id { get; set; }
    public string UserName { get; set; }

    public virtual ICollection<Address> Addresses { get; set; }
    public virtual License License { get; set; }
}
Q1: какой из них лучше? Почему? Плюсы и минусы?

Редактировать:

public class License
{
    public License()
    {
        this.User = new User();
    }
    public int Id { get; set; }
    public string Key { get; set; }
    public DateTime Expirtion { get; set; }

    public virtual User User { get; set; }
}
Q2: Во втором подходе было бы переполнение стека, если класс `License` также имеет ссылку на класс` User`. Это означает, что у нас должна быть односторонняя ссылка. (?) Как мы должны решить, какое из свойств навигации должно быть удалено?

Ответы на вопрос(6)

Ваш ответ на вопрос