Mes questions sont probablement très simples, comment chargez-vous les enfants / sous-classes. Il n'y a pas de "charge" ou quoi que ce soit de ce que je peux trouver pour avoir le contexte charger les enfants.
La classe de contexte est de type ObjectContext, voir ci-dessous: P>
public partial class RTIPricingEntities : global::System.Data.Objects.ObjectContext
4 Réponses :
Vous pouvez accabler la charge: ... ou projet: p> L'avantage de la projection est que vous obtenez uniquement les données Vous avez besoin, pas de l'ensemble de chaque entité référencée. L'avantage du chargement avide est que les entités renvoyées changent de suivi. Choisissez la technique appropriée pour le problème à la main. P> oui, il em> est important de mentionner que vous utilisez que vous utilisez RIA Services. Je présume que vous travaillez également auprès du client. Cela fait des choses complètement em> différents. P> dans les services RIA, il est très important de vous assurer de retourner l'ensemble du graphe des entités souhaitées dans la charge initiale. Vous ne voulez pas appeler quelque chose comme .charger () sur une entité, car ce serait une autre chaude au serveur, ce qui est mauvais pour la performance. Si vous êtes dans, par exemple, un client Silverlight et demander une liste d'instances à partir du serveur et que leurs propriétés associées ne sont pas déjà matérialisées, il est déjà trop tard. En outre, inclure ne fonctionnera pas dans un client Silverlight. Par conséquent, les services RIA disposent d'outils côté serveur que vous pouvez utiliser pour vous assurer de renvoyer le graphique d'objet approprié et entièrement matérialisé initialement. P> Ce que vous devez faire à la place est utilisé à la place. Vous pouvez créer une classe de métadonnées «Buddy» pour décorer votre modèle d'entité avec [Inclure]. Il existe des exemples dans Les services RIA Document de vue d'ensemble, section 4.8 . p> p>
Bonjour, je ne sais pas si nous avons la même version, mais aucune option n'est possible lorsque je le codise. Il n'y a pas de ".include" disponible, seulement "intersect" .. IM en utilisant des entités dérivées d'entitéFramework qui a "ObjectContext" comme classe de base .. Et quand je projet, il n'y a pas de propriétés dans IntelliSense pour moi.
Inclure est une méthode d'objetQuisery
Vous pouvez utiliser le Inclure () méthode de la System.Data.ObjectS.ObjectQuery . Cette méthode spécifie les objets associés à inclure dans les résultats de la requête et les appels à inclure () peuvent être chaînés ensemble pour charger plusieurs objets associés.
Par exemple, pour charger ModifiedByUser et la catégorie Vous utiliseriez une requête comme celle-ci: P>
var q = from p in context.Products .Include("ModifiedByUser") .Include("Category.ModifiedByUser") select p;
Je vois cette solution un peu, alors je dois faire quelque chose de totalement différent de tout le monde. Fondamentalement, j'utilise le contexte du DataModel générant par l'entitéFramework. J'ai les derniers de .net. Il n'y a pas de "inclus" disponible. Utilisez-vous DBML / Linq dans cet exemple? Je pense que c'est pourquoi ses différences ...
Utilisation du Cependant, vous devriez parfois "recharger" quelque chose plus tard sur cela Vous n'avez pas "inclus" ou que vous n'avez parfois besoin que parfois, ce que l'instruction inclure peut être un gaspillage de cycles informatiques dans de nombreux cas. p> dans le cas d'une relation singulière comme "produit.category" (Où Product.Category est votre propriété de navigation du produit à la catégorie), vous disposez probablement d'un élément "produit.categoryReference". Vous pouvez vérifier que pour voir si elle est chargée ou non, et sinon, vous pouvez le charger "à la demande": p> maintenant votre "catégorie" de référence doit être en mémoire. et prêt à être utilisé. p> Si vous avez une propriété de navigation qui fait référence à une collection de choses (par exemple, "parties" pour un produit), vous pouvez faire la même chose, directement sur la propriété de navigation: p> .include () code> Comme beaucoup d'autres ont suggéré est un excellent moyen de réaliser ce dont vous avez besoin.
if(!Product.Parts.IsLoaded)
{
Product.Parts.Load();
}
Merci à tout le monde, j'ai compris que la raison pour laquelle je n'ai pas été en mesure de mettre en œuvre les nombreuses solutions proposées est que le contexte est différent une fois converti par le service de domaine pour Silverlight. Dans le code derrière le modèle de données-cadre d'entité, je peux implémenter toutes vos solutions et je viens de découvrir cela. Mais grâce à votre aide, je savais que la question devait être que je cherchais au mauvais endroit ...
J'ai remarqué que la solution mentionnée ci-dessus par Craig ne charge pas à la fois le modifiéByUser et la catégorie. Il ne charge que la dernière collection d'objets qui dans ce cas est "catégorie". Toutefois, si vous échangez la commande, pour le faire .include ("catégorie"). Inclure ("ModifiedByUser") code>, puis
ModifiedByUser code> est chargé. La chose bizarre est que la propriété
ischargée code> de la collection d'objets affichera "true", mais le compte de la première collection d'objets sera toujours zéro. Je ne sais pas pourquoi c'est le cas. P> p>
Voici un exemple de la manière dont je charge les données: peut-être que j'aurais dû mentionner que je codifie cela pour une application Silverlight. Et c'est à travers un domaines-service. RtipricingContext _Context = nouveau rtipricingContext (); LOADOPERATION OP = _CONTEXT.LOAD (context.getPurchaseOrdercery (), ServionnaireLoadCallback, NULL); PRIVÉE PRISHERPORDERSPARDERSLOWERDCALLBACK (LOADOPERATION LO) {IEnumerable PO = LO.ENTITES.Où (W => w.Userid == SELECTELLEER.ID); // C'est la collection que j'ai besoin de remplir les sous-classes.