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`. Это означает, что у нас должна быть односторонняя ссылка. (?) Как мы должны решить, какое из свойств навигации должно быть удалено?