web-dev-qa-db-fra.com

Erreur lors de l'appel de procédures stockées à partir de EntityFramework

J'essaie d'accéder à une procédure de magasin à partir d'EntityFramework.

J'ai suivi ces étapes:

Tout d'abord, j'ai créé la procédure stockée dans la base de données Azure:

enter image description here

Ensuite, j'ai mis à jour le modèle .edmx à partir de la base de données, en sélectionnant uniquement la procédure StoredProcedure que je souhaite.

enter image description here

Une fois cela fait, dans la fonction Import, je vois la procédure stockée ajoutée, mais pas dans la section de la procédure stockée . Que puis-je faire pour qu’elle apparaisse ici?

enter image description here

Dans la section Importation de fonctions, tous les paramètres sont définis en tant qu'entrée, alors que "MaxReference" doit être marqué en tant que Output . Comment puis-je le modifier?

enter image description here

Bien que ces deux problèmes, j'ai exécuté le code:

enter image description here

et j'ai eu l'exception suivante:

EntityCommandCompilationException
An error occurred while preparing command definition. See the inner exception for details.

et l'innerException:

The function import 'DataModelEntities.AssignMaxSalesRef' cannot be executed because it is not assigned to a storage function.

enter image description here

26
Ingrid

Vous souhaiterez peut-être faire référence à cet article de blog: FunctionImport n'est pas mappé sur une fonction de magasin Erreur , qui traite d'un problème similaire. La cause étant apparemment:

J'ai dû modifier une procédure stockée et celle-ci a été supprimée du fichier XML Entity Data Model (* .edmx).

Avec la solution suivante étape par étape:

Il existe une solution simple pour corriger cette erreur. Commencez par ouvrir votre fichier edmx et cliquez avec le bouton droit de la souris sur le modèle propriétaire de la procédure stockée. Cliquez sur Ajouter puis sélectionnez «Ajouter une fonction d'importation».

Ajoutez le même nom d’importation de fonction que celui utilisé dans votre fichier de contexte (si, comme moi, la méthode a déjà été créée, mais est fausse, sinon elle est toute nouvelle et elle sera de toute façon restituée). Sélectionnez le nom de la procédure stockée que vous essayez de corriger. Choisissez les entités et cliquez sur OK. Une nouvelle fenêtre pourrait s’ouvrir: «Vérifiez que le nom FunctionImport est unique».

Si tel est le cas et que vous obtenez la fenêtre contextuelle «Vérifiez que le nom FunctionImport est unique», procédez comme suit: Ouvrez votre fichier * .edmx et cliquez avec le bouton droit de la souris sur le modèle que vous souhaitez mettre à jour. Sélectionnez «Afficher dans le navigateur de modèle». La fenêtre du navigateur de modèle s'ouvre. Allez à: {myProject} .DataModel> EntityContainer: {quelquechose d'Entités}> Importation de fonction. La fonction à l'origine du problème devrait être là, supprimez-la et enregistrez le fichier * .edmx.

Essayez d'ajouter à nouveau l'importation de fonctions. Voila! aucun problème cette fois. Enregistrez le fichier * .edmx et recréez le fichier de contexte (en effectuant une simple modification non invasive, telle que l'ajout d'un espace au fichier {myProject} .Context.tt). assurez-vous que la nouvelle méthode:

public virtual ObjectResult<MyEntity> <MyEntity>_NameoftheSP(parametets) est présent dans votre fichier de contexte.

Une autre ressource de dépannage avec des instructions étape par étape similaires (et des images!) Sur la mise à jour du fichier edmx: La fonction d'importation ne peut pas être exécutée car elle n'est pas mappée sur une fonction de stockage .

26
Alex

Cet article devrait faire l'objet d'un commentaire, mais je n'ai pas assez de représentant pour commenter.

J'avais un problème similaire. Mes procédures stockées étaient visibles et pourtant, j'avais toujours l'erreur. Cette question et la réponse d'Alex m'ont amené à regarder sous Importations de fonctions dans le navigateur de modèle et j'ai constaté que j'avais plusieurs entrées pour chacune des procédures stockées. Ils avaient des numéros de séquence pour les empêcher d’être de véritables doublons. J'ai supprimé tout ce qui se trouve sous Importations de fonction et tout ce qui se trouve sous Procédures/Fonctions stockées, puis je les ai rajoutés en mettant à jour le modèle à partir de la base de données. Mon problème est maintenant résolu. 

22
MrsTapp

J'ai eu cette erreur:

The function import *XXX* cannot be executed because it is not mapped to a store function.

quand je vérifie, ma procédure stockée a été supprimée de la base de données. Je l'ai créé à nouveau et cela a corrigé l'erreur. 

2
Reza

Pour ceux d’entre vous qui ont essayé la solution, mais ne fonctionnent toujours pas, assurez-vous que votre proc n’a aucun problème avec les noms de colonnes invalides, ni aucun autre problème lié. J'ai reçu le même message d'erreur, mais dans mon cas, il s'agissait d'une référence de nom de colonne non valide dans le proc.

1
George Focas

Lorsque vous ouvrez l’explorateur edmx (mode Diagrma), la fenêtre de l’explorateur de modèles s’affiche côté de votre diagramme.

Dans la section Importation de fonction, essayez de trouver la fonction enregistrée dans la visite, cliquez dessus avec le bouton droit de la souris, vous pourrez alors la modifier.

Une fenêtre s'ouvrira, puis choisissez votre fonction enregistrée. une fonction sera cartographiée après que

voila, ça marche pour moi.

1
issam chouchane

Utilisation de la base de données Oracle sur devArt, EF 5.0. Ce qui a résolu le problème pour moi est de supprimer ladite procédure stockée du modèle, puis de l'ajouter à nouveau. Assurez-vous que la procédure stockée est correctement compilée dans la base de données, sinon vous ne pourrez pas l'ajouter au modèle.

1
nir weiner