Как определить коллекцию в POCO в Entity Framework 4? - PullRequest
6 голосов
/ 14 апреля 2010

Допустим, у меня есть команда класс, который содержит 0 или более игроков .

Класс Player прост:

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; }
}

1 Ответ

7 голосов
/ 14 апреля 2010

Во-первых, давайте обойдемся без недопустимых вариантов. Вариант 3 не совсем правильный; мы находимся в объектном пространстве, а не в LINQ to Entities. Вариант 4 тоже не прав; ObjectSet предназначен для ObjectContext, а не для типа POCO.

Это оставляет 1 и 2. Они оба будут работать правильно. Entity Framework инициализирует коллекцию при материализации связанных экземпляров из базы данных, если вы решите не делать этого. Однако у варианта 2 есть то преимущество, что вы можете использовать новый Team в своем собственном коде перед сохранением его в базе данных и последующим чтением. Так что я бы, наверное, выбрал это.

...