8

Das Include funktioniert nicht, nachdem ich eine Auswahl für die IQueryable-Abfrage durchführen. Gibt es einen Weg dazu? Meine Frage istWenn ich aus einem IQueryable auswählen, ist das Include verloren

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

Ich versuche dann mya Ansichtsmodell in meiner WebUI Schicht zu füllen den folgenden Code verwenden

  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; 

Das Problem tritt jetzt in meinem neu erstellten NetworkViewModel Die Kontakte Sammlungsobjekte enthalten keine geladene Daten für RelationshipSource.Target oder RelationshipSource.Quelle

Allerdings sind die Daten vorhanden, wenn sie von der ursprünglichen Repository IQueryable-Methode ausgeführt werden. Die zugehörigen Include-Daten werden jedoch anscheinend nicht in die neue Contacts-Auflistung übertragen, die erstellt wird, wenn ich den obigen Code Select New NetworkViewModel {} verwende.

Gibt es eine Möglichkeit, diese Daten beizubehalten, wenn sie an ein neues Objekt übergeben werden? Im Moment bekomme ich immer NULL Ausnahmen

Antwort

6

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

In Ihrem Fall jedoch denke ich, es gibt eine bessere Problemumgehung als das, was in diesem verknüpften Artikel ist. Sie verwenden bereits ein Ansichtsmodell für Network. Das ist gut! Tue es auch für den Kontakt (und die damit verbundenen Eigenschaften), und deine Probleme mit eifrigem Laden werden auf magische Weise verschwinden. Projektion immer funktioniert.

+0

Hallo Craig - Danke für den Kommentar und den Link. Wo soll ich das ContactViewModel verwenden - Schlägst du vor, dass ich eine Projektion innerhalb einer Projizierung mache? Ist das möglich? –

Verwandte Themen