views:

63

answers:

1

Lets say I've a Team class which contains 0 or more Players.

The Player class is easy:

public class Player
{
    public long Id { get; set; }
    public string Name { get; set; }
    public Team Team { get; set; }
}

But whats the best to define the Team class?

Option 1

public class Team
{
    public long Id { get; set; }
    public string Name { get; set; }
    public ICollection<Player> Players { get; set; }
}

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

Option 3:

public class Team
{
    public long Id { get; set; }
    public string Name { get; set; }
    public IQueryable<Player> Players { get; set; }
}

Option 4:

public class Team
{
    public long Id { get; set; }
    public string Name { get; set; }
    public ObjectSet<Player> Players { get; set; }
}
+2  A: 

First, let's dispense with the unacceptable options. Option 3 isn't really right; we are in object space, not LINQ to Entities space. Option 4 isn't right, either; ObjectSet is for use on an ObjectContext, not on a POCO type.

That leaves 1 and 2. Both of them will work correctly. The Entity Framework will initialize the collection when materializing related instances from the database if you choose not to. However, option 2 does have the advantage that you can use a new Team in your own code before saving it to the database and reading it back. So I would probably pick that one.

Craig Stuntz