Позволяет говорят, что у меня есть класс Команды, который содержит 0 или больше Плееров.
Класс Плеера легок:
public class Player
{
public long Id { get; set; }
public string Name { get; set; }
public Team Team { get; set; }
}
Но что лучшее должно определить класс Команды?
Опция 1
public class Team
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Player> Players { get; set; }
}
Опция 2:
public class Team
{
public Team()
{
Players = new Collection<Player>();
}
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Player> Players { get; set; }
}
Опция 3:
public class Team
{
public long Id { get; set; }
public string Name { get; set; }
public IQueryable<Player> Players { get; set; }
}
Опция 4:
public class Team
{
public long Id { get; set; }
public string Name { get; set; }
public ObjectSet<Player> Players { get; set; }
}
Во-первых, давайте откажемся от неприемлемых вариантов. Вариант 3 не совсем правильный; мы находимся в пространстве объектов, а не в пространстве LINQ to Entities. Вариант 4 тоже неверен; ObjectSet
предназначен для использования в ObjectContext
, а не в типе POCO.
Остались 1 и 2. Оба они будут работать правильно. Entity Framework инициализирует коллекцию при материализации связанных экземпляров из базы данных, если вы этого не сделаете. Однако вариант 2 имеет то преимущество, что вы можете использовать новую команду Team
в своем собственном коде, прежде чем сохранять ее в базе данных и читать обратно. Так что я, наверное, выбрал бы это.