2010-04-14 8 views
6

Diciamo che ho una classe Team che contiene 0 o piùGiocatori.Come definire una collezione in un POCO in Entity Framework 4?

Il Player classe è facile:

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

Ma che cosa è il migliore per definire la squadra classe?

Opzione 1

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

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

Opzione 3:

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

Opzione 4:

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

risposta

7

In primo luogo, cerchiamo di rinunciare a opzioni inaccettabili. L'opzione 3 non ha proprio ragione; siamo nello spazio oggetti, non nello spazio LINQ to Entities. Anche l'opzione 4 non è corretta; ObjectSet deve essere utilizzato su un ObjectContext, non su un tipo POCO.

Quello lascia 1 e 2. Entrambi funzioneranno correttamente. Entity Framework inizializzerà la raccolta quando materializzerà le istanze correlate dal database se si sceglie di non farlo. Tuttavia, l'opzione 2 ha il vantaggio che è possibile utilizzare un nuovo Team nel proprio codice prima di salvarlo nel database e leggerlo di nuovo. Quindi probabilmente lo sceglierei.

Problemi correlati