2010-04-14 10 views
6

Disons que j'ai une classe de l'équipe qui contient 0 ou plusJoueurs.Comment définir une collection dans un POCO dans Entity Framework 4?

La classe du joueur est facile:

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

Mais ce qui est le mieux pour définir la classe Team?

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

Répondre

7

Tout d'abord, nous allons passer des possibilités inacceptables. L'option 3 n'a pas vraiment raison. nous sommes dans l'espace objet, pas dans l'espace LINQ to Entities. L'option 4 n'est pas juste non plus; ObjectSet est à utiliser sur un ObjectContext, pas sur un type POCO.

Cela laisse 1 et 2. Les deux fonctionneront correctement. Entity Framework initialisera la collection lors de la matérialisation des instances connexes de la base de données si vous choisissez de ne pas le faire. Cependant, l'option 2 présente l'avantage de pouvoir utiliser un nouveau Team dans votre propre code avant de l'enregistrer dans la base de données et de le relire. Donc je choisirais probablement celui-là.