2

Je commence tout juste avec Entity Framework 4.0 et ASP.NET MVC 2 et j'ai quelques questions concernant l'utilisation de procédures stockées et de pagination.Entity Framework 4 - Appel d'une procédure stockée Select/Paging

Vous pouvez mapper les actions d'insertion, de mise à jour et de suppression sur des procédures stockées, ce que j'ai déjà fait. Cependant, pour que ma pagination fonctionne, j'ai besoin de mapper l'action Sélectionner.

Maintenant, c'est le seul/meilleur moyen que je peux faire cela en allant dans mon navigateur de modèle, en cliquant droit sur la procédure stockée et en ajoutant "Ajouter une fonction".

Il en résulte le code suivant ....

var contactFormSubmissions = _entities.ContactFormSubmission_GetContactFormSubmissions(1, 10); 

Mon problème avec ceci est qu'il ajoute au conteneur d'entité globale au niveau de la racine plutôt que l'entité ContactFormSubmission comme l'insertion/mise à jour et supprimer actes.

Je préférerais quelque chose comme cela, mais à travers une procédure stockée ...

_entities.ContactFormSubmissions.Select<ContactFormSubmission>(string.Empty, pageParam, pageSizeParam); 

De cette façon, la sélection est appelée de la même manière que les autres actions et je ne finissent avec beaucoup de fonctions la racine de l'Entity Container qui pourrait devenir ingérable.

Ceci est un plus petit problème car au moins son tout fonctionne actuellement.

Ma prochaine question est de savoir comment implémenter au mieux la pagination en utilisant cette fonction. Tous les exemples que j'ai vus sur la façon d'accomplir la pagination en utilisant MVC et Entity Framework ont ​​utilisé LINQ et IQueryable. Y at-il un moyen d'utiliser IQueryable avec un chargement paresseux et les fonctions LINQ Skip/Take avec une fonction table/sproc?

http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/

PS - des exemples de recherche de personnes dans MVC avec Entity Framework en utilisant SPs serait génial!

Répondre

1

La sortie de la boîte LINQ n'emballe pas une procédure stockée. Les fonctions Entity Framework sont le seul moyen d'appeler des procédures stockées via EF et de renvoyer une entité. C'est compréhensible, car EF sait ce qu'il faut savoir pour paramétrer vos variables de pagination. Vous ne devriez/ne devriez jamais faire cela, mais je me sens obligé (puisque rien n'est impossible) de dire que vous pourriez écrire une implémentation personnalisée de LINQ pour vos procédures, mais ce serait une montagne de travail pour envelopper proprement quelques procédures.

Quelques suggestions:

  • Vous pouvez simplement utiliser LINQ et ignorer la procédure stockée
  • Si vous restez avec EF enroulant une procédure stockée via une fonction, vous pouvez soulager les nombreux problèmes de fonction en brisant votre modéliser dans plusieurs contextes
  • Vous pouvez utiliser la propriété de connexion du contexte EF pour appeler directement la procédure stockée et disposer d'une classe viewmodel en lecture seule (non liée à EF) à utiliser à des fins d'affichage.Le champ id (ou autre clé primaire) serait toujours la bonne valeur pour vous rendre à un écran de détail ou un rappel json pour obtenir une version modifiable de l'objet EF réel

Aucun de ceux-ci n'est parfait, mais beaucoup de façons de faire face à cela.

Questions connexes