8

L'inclusione non funziona dopo aver eseguito una selezione sulla query IQueryable. C'è un modo attorno a questo? La mia domanda èSe si seleziona da un IQueryable, l'inclusione viene persa

public IQueryable<Network> GetAllNetworks() 
{ 
    var query = (from n in _db.NetworkSet 
       .Include("NetworkContacts.Contact") 
       .Include("NetworkContacts.Contact.RelationshipSource.Target") 
       .Include("NetworkContacts.Contact.RelationshipSource.Source") 
       select (n));   
    return query;; 
} 

Allora provo a popolare Mya ViewModel nel mio strato WebUI utilizzando il seguente codice

  var projectedNetworks = 
      from n in GetAllNetworks() 
      select new NetworkViewModel 
      { 
       Name = n.Name, 
       Contacts = from contact in networkList 
        .SelectMany(nc => nc.NetworkContacts) 
        .Where(nc => nc.Member == true) 
        .Where(nc => nc.NetworkId == n.ID) 
        .Select(c => c.Contact)       
        select contact, 
      }; 

     return projectedNetworks; 

Il problema ora si verifica nel mio recente creazione NetworkViewModel Gli oggetti Contatti collezione non includono alcuna dati caricati per RelationshipSource.Target o RelationshipSource.Source

Tuttavia, i dati sono presenti quando vengono eseguiti dal metodo IQueryable del repository originale. Tuttavia, i relativi dati di inclusione non sembrano essere trasferiti nella nuova raccolta di Contatti che viene creata quando utilizzo il codice Select New NetworkViewModel {} sopra.

C'è un modo per conservare questo dati Includi quando viene passato in un nuovo oggetto? Al momento continuo a ricevere le eccezioni NULL

risposta

6

Here's an explanation of what's happening, with a workaround.

Nel tuo caso, tuttavia, penso che ci sia una soluzione migliore di quella contenuta nell'articolo collegato. Stai già utilizzando un modello di visualizzazione per Network. Quello è buono! Fallo per il contatto (e anche per le proprietà correlate) e i tuoi problemi con il caricamento ansioso scompariranno magicamente. Proiezione sempre funziona.

+0

Ciao Craig - Grazie per il commento e il collegamento. Dove dovrei usare ContactViewModel - Stai suggerendo che io faccia una proiezione all'interno di una proiezione? È possibile? –