À l'aide d'une procédure stockée dans le cadre d'une entité, comment obtenir les propriétés de navigation de l'entité?

StackOverflow https://stackoverflow.com/questions/1035677

Question

Le framework Entity est extrêmement lent, alors j’ai essayé d’utiliser une procédure stockée, mais j’ai rencontré ce problème.

Entity Framework vous permet de définir une procédure stockée qui produit une entité. Cependant, mon entité a des "propriétés de navigation" qui ne sont pas renseignées lors de l'utilisation de cette méthode.

Y at-il un travail autour?

Était-ce utile?

La solution

Les procédures bien stockées ne sont pas composables. Il est donc impossible d'appeler votre SPROC et de faire en sorte que l'EF remplisse automatiquement les relations dans la même requête, à l'aide de Include () ou quelque chose de ce genre.

Disons que vous avez des produits et des catégories

et vous avez un sproc pour obtenir des produits:

c'est-à-dire

var products = context.GetProducts(someproductfilter);

les produits résultants n'auront pas leurs catégories chargées.

Toutefois, si vous avez une deuxième procédure stockée qui obtient les catégories pour lesdits produits:

c'est-à-dire

var categories = context.GetCategoriesForProducts(someproductfilter);

Une fonctionnalité dans EF appelée correction des relations, qui relie les entités associées une fois que la seconde entité entre dans le contexte, assurera qu'après les deux appels, chaque produit dans les produits aura une catégorie non nulle.

Ce n'est pas idéal, car vous faites plus d'une requête, mais cela fonctionnera.

Une alternative consiste à utiliser EFExtensions . Le gars qui a écrit cela a créé la possibilité d'écrire des sprocs qui chargent plus de données en une fois.

J'espère que cela vous aidera

A bientôt Alex

Autres conseils

J'ai trouvé cette question SO lors de la recherche de procédures stockées (SP) avec EF. Je vois aussi des gens comme @KristianNissen et @Todilo qui ont demandé s'il y avait une mise à jour avec EF6.

La réponse est oui, EF 6 a changé les choses, mais rien n’a été ajouté pour faciliter le chargement des propriétés de navigation lors de l’utilisation de SP. Vous ne pouvez pas non plus utiliser la méthode .Include () avec les SP, comme cela a été demandé dans cette SO question .

Le seul moyen est d'écrire votre SP pour charger spécifiquement les propriétés de navigation. Cependant, il existe maintenant une bonne documentation Microsoft sur l'utilisation des fournisseurs de services. Voir Query SP et SP renvoyant plusieurs ensembles de résultats .

Pour être complet, la modification apportée par EF version 6 consistait à autoriser les procédures stockées (SP) à gérer les insertions, les mises à jour et les suppressions - voir Article Microsoft et Didacticiel Entity Framework .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top