Wenn ich wählen Sie aus einer IQueryable dann die Enthalten ist, ist verloren
Den include
funktioniert nicht, nachdem ich eine wählen Sie auf der IQueryable
Abfrage.
Gibt es eine Möglichkeit, um dieses? Meine Abfrage ist
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 zu füllen mein ViewModel in meiner WebUI-Ebene mit dem folgenden code
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 Contacts
collection-Objekte enthalten keine geladenen Daten für RelationshipSource.Target
oder RelationshipSource.Source
.
Aber die Daten gibt es beim starten von der original-Repository IQueryable
Methode. Jedoch ist der Zusammenhang include
Daten nicht scheinen, um übertragen zu bekommen in der neuen Contacts
Sammlung, die erstellt wird, wenn ich den Select New NetworkViewModel {}
.
Gibt es eine Möglichkeit zu erhalten Include
Daten, wenn es übergeben bekommt, in ein neues Objekt? Im moment habe ich einfach immer Null
Ausnahmen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Erklärung von, was geschieht, einen workaround.
In Ihrem Fall, aber ich denke, es gibt eine besser workaround als das, was in diesem verlinkten Artikel. Sie sind bereits mit einem view-model für
Network
. Das ist gut so! Tun Sie es für den Kontakt (und das ist mit "Eigenschaften") zu, und Ihre Probleme mit eager loading wird magisch verschwinden. Projektion immer funktioniert.