À 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é?

.net c# entity entity-framework

Question

Le framework Entity est extrêmement lent, j'ai donc 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?

Réponse acceptée

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 de quelque chose de ce genre.

Alors 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 deuxième 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 t'aides

A bientôt Alex


Réponse populaire

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 aider au 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 des SP comme cela a été demandé dans cette question SO .

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 SP - 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 l'insertion, la mise à jour et la suppression - voir l' article de Microsoft et Entity Framework Tutotial .



Related

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