如何在Entity Framework 4中的POCO中定义集合?

Ste*_*ath 6 collections entity-framework iqueryable poco

假设我有一个包含0个或更多玩家Team类.

播放器类很简单:

public class Player
{
    public long Id { get; set; }
    public string Name { get; set; }
    public Team Team { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但最好定义Team类?

选项1

public class Team
{
    public long Id { get; set; }
    public string Name { get; set; }
    public ICollection<Player> Players { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

选项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; }
}
Run Code Online (Sandbox Code Playgroud)

选项3:

public class Team
{
    public long Id { get; set; }
    public string Name { get; set; }
    public IQueryable<Player> Players { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

选项4:

public class Team
{
    public long Id { get; set; }
    public string Name { get; set; }
    public ObjectSet<Player> Players { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Cra*_*ntz 7

首先,让我们免除不可接受的选择.备选方案3并不正确; 我们在对象空间,而不是LINQ to Entities空间.备选方案4也不对; ObjectSet用于ObjectContext,而不是POCO类型.

留下1和2.它们都能正常工作.如果您不选择,实体框架将在从数据库中实现相关实例时初始化集合.但是,选项2确实具有以下优点:您可以Team在将自己的代码保存到数据库并将其读回之前在自己的代码中使用new .所以我可能会选择那个.