Reputation: 9830
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; }
}
Upvotes: 6
Views: 1577
Reputation: 126547
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.
Upvotes: 7