2013-07-31 15 views
5

Sto utilizzando EntityFramework per la prima volta e forse questa domanda è così semplice ... Ho usato il primo metodo del codice .. Ho un personale di classe che assomiglia a questo:Oggetto chiave esterna di riempimento in Entity Framework 4

public class Personnel 
{ 

    public string Id { set; get; } 
    public int Code { set; get; } 
    public string Name { set; get; } 
    public int Type { set; get; } 

    public JobTitle Title { set; get; } 
} 

e la classe jobTitle:

public class JobTitle 
{ 
    public string Id { set; get; } 
    public int Number { set; get; } 
    public string Title { set; get; } 

    public List<Personnel> Personnels { set; get; } 

} 

che l'ultima proprietà della classe del personale è una chiave esterna nella tabella personale di problema course..my è quando voglio recuperare tutti i personnels (o di un personale) da DB usando espressione lambda..l'oggetto chiave esterna è nullo ... l'espressione lambda è l sotto:

Context.ContextInstance.Personnels.ToList(); 

e se si modifica l'espressione su questo l'oggetto chiave esterna non è più null.

Context.ContextInstance.Personnels.Include("Title").ToList(); 

è nel modo giusto ?? .. c'è un modo migliore ?? .. Ho supposto che EF capirà automaticamente che !!!! .. se ci sono più di 1 FK poi devo usare Include per tutti loro ?? per favore aiutami a capire.

Grazie

+0

possibile duplicato di [Disabilita caricamento lazy per impostazione predefinita in Entity Framework 4] (http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –

risposta

5

Ciò è dovuto al caricamento pigro. Quando chiami lo Context.ContextInstance.Personnels.ToList(); questo preleverà tutte le persone del personale, ma il titolo non recupererà finché non verrà istanziato, quindi rendilo virtuale per ottenerlo.

o, è possibile disattivare lazy loading da

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") { 
    this.Configuration.LazyLoadingEnabled = false; 
} 

In questo modo avranno tutti i dati relativi dal contesto. L'utilizzo di "include" viene caricato su richiesta, quando si specificano le proprietà che si desidera interrogare.

La parola chiave virtuale consente al runtime di framework di entità di creare proxy dinamici per le classi di entità e le relative proprietà e da tale supporto per il caricamento lento. Senza il caricamento virtuale, il caricamento non sarà supportato e si ottengono valori null sulle proprietà della raccolta.

Problemi correlati