Si je sélectionne un IQueryable, l'inclusion est perdue

anonymous-types entity-framework include linq-to-entities

Question

L'inclusion ne fonctionne pas après l'exécution d'une sélection sur la requête IQueryable. Y a-t-il un moyen de contourner cela? Ma requête est

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

J'essaie ensuite de renseigner mya ViewModel dans ma couche WebUI à l'aide du code suivant

            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;

Le problème se produit maintenant dans mon NetworkViewModel nouvellement créé. Les objets de la collection Contacts n'incluent aucune donnée chargée pour RelationshipSource.Target ou RelationshipSource.Source

Toutefois, les données sont présentes lorsqu’elles sont exécutées à partir de la méthode Repository IQueryable d’origine. Cependant, les données incluses associées ne semblent pas être transférées dans la nouvelle collection de contacts créée lorsque j'utilise le code Select New NetworkViewModel {} ci-dessus.

Existe-t-il un moyen de préserver ces données d'inclusion lorsqu'elles sont transmises à un nouvel objet? Pour le moment, je continue à recevoir des exceptions NULL

Réponse acceptée

Voici une explication de ce qui se passe, avec une solution de contournement .

Dans votre cas, cependant, je pense qu'il existe une meilleure solution de contournement que ce qui est dans cet article lié. Vous utilisez déjà un modèle de vue pour le Network . C'est bon! Faites-le pour le contact (et ses propriétés connexes) aussi, et vos problèmes de chargement rapide disparaîtront comme par magie. La projection fonctionne toujours .



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow