2017-02-08 1 views
0

Je travaille sur une application web Asp.net MVC traitant d'une base de données Oracle, et j'ai une page de tableau de bord de statistiques. J'utilise Entity Framework code-first avec ODP.Net, mais je suis confronté à un problème de performances sur cette page car les requêtes Entity Framework sont si complexes. Je dois donc convertir mes requêtes Entity Framework en procédures stockées.Comment appeler une procédure stockée dans Oracle à partir de .net framework?

Par exemple: Je crée la procédure stockée suivante dans Toad

CREATE OR REPLACE PROCEDURE Schema.DashBoardStatistics 
    (
    -- Add the parameters for the stored procedure here 
    p_YearId number, cur OUT SYS_REFCURSOR 
    ) 
AS 
BEGIN 
    -- select top 5 Fields By rating Rating 
    Open cur FOR Select * FROM Schema."Logs" where Schema."Logs"."Id"= p_YearId ; 

END; 
/

Comment ajouter une autre sélection à cette Sp pour retourner un jeu de données à mon code? Et comment puis-je l'appeler à partir de mon code et recevoir cet ensemble de données dans les classes de modèles?

Avis: Je veux utiliser la requête Entity Framework pour exécuter la procédure stockée n'ADO.NET Pour pouvoir cartographier ensemble de données de retour à mes entités

Merci!

+2

Copie possible de [Appel de la procédure stockée Oracle à partir de C#?] (Http://stackoverflow.com/questions/3940587/calling-oracle-stored-procedure-from-c) – Igor

+0

1. Vous pouvez mapper des entités à des procédures stockées mais personne ne va écrire le code pour vous. Votre meilleur pari est de suivre un tutoriel sur Entity Framework et procédures stockées (il y en a beaucoup là-bas). Essayez-le et revenez avec du code si vous êtes bloqué (* vous devez essayer *). 2. Si vous souhaitez exécuter manuellement le processus stocké et mapper les résultats à une entité, le lien en double est toujours valide dans une certaine mesure. – Igor

+0

EF est bon pour CRUD. Pour cela - pas tellement. Ecrivez un modèle d'hydrateur qui peut correspondre au champ de jeu de résultats à une propriété sur un modèle. Comment faire 2 sélections? - 'p_YearId nombre, cur1 OUT SYS_REFCURSOR, cur2 OUT SYS_REFCURSOR' –

Répondre

1

Voir l'exemple au milieu de cette procédure pas à pas:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/2015/entityframework_linq_modelfirst/Entity%20Framework%20LINQ%20and%20Model%20First.html

La clé est que vous avez besoin d'un fichier de configuration pour les métadonnées REF CURSOR. Vous devez installer Oracle Developer Tools pour Visual Studio, puis "Exécuter" la procédure stockée en utilisant le menu de l'Explorateur de serveurs. Cela vous donnera une option pour générer automatiquement le fichier de configuration requis qui contient les métadonnées pour le curseur de référence.

Vous suivez ensuite la procédure pas à pas pour remplir la boîte de dialogue Importer une fonction qui associe le SP à une fonction entité.