Blog de Portekoi : Programmation et Astuces

Programmation Cobol, Php, Asp, Java et DotNet…

Utiliser Entity Framework pour les Procédures Stockées

Pré Requis : Visual Studio et Sql Server

Dans VS 2012 : (Nous partons sur le pattern DAL + IHM)
Créer un projet de type « Bibliothèque de Classes C# » que vous nomerez « DAL »
Puis, dans « Fichier > Ajouter > Nouveau Projet », ajoutez un projet de type « Application Console » que vous nomerez « IHM »
Vous obtiendrez ceci :

Sous Sql Server, nous devons maintenant préparer nos objets. Ma base de données est déjà existante.

Tout d’abord, ajoutons une table « Utilisateur » composée des champs suivant :
ID bigint (Auto Incrementé), Nom nvarchar(50) et Prenom nvarchar(50)

Ajoutons quelques données. (Portekoi en 1 et AAAAA en 2)

Ensuite, dans programmabilité, ajouter une nouvelle procédure stockée :

Nommez la « PUtilisateurGet » : P pour procédure, « Utilisateur » pour le sujet concerné et « Get » pour l’action effectuée.
A vous de la nommer comme vous le souhaitez mais je trouve parlant de le faire ainsi.

Ajoutons maintenant un paramètre à passer à la procédure du type « int » qui sera l’ID de l’utilisateur recherché.

Enfin, mettons notre requête :
SELECT Nom, Prenom from dbo.Utilisateur were id = @ID

Le code finale :

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Portekoi
-- Create date: 27/08/2013
-- Description: Chercher un Utilisateur par son ID
-- =============================================
CREATE PROCEDURE PUtilisateurGet
-- Add the parameters for the stored procedure here
@ID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT Nom, Prenom from dbo.Utilisateur where id = @ID
END
GO

Maintenant, retournons sous VS 2012. Nous devons ajouter notre objet entity :

Dans le projet « DAL », ajoutons un nouvel élément : ADO.Net Entity Data Model

Sélectionner maintenant « Générer à partir de la base de donnée » comme ci-dessous :

Maintenant, il faut configurer la connexion. Par défaut, Visual Studio vous proposera les connexions du fichier de config de la DAL (App.config) ou les connexions locales.
Personnellement, il me propose de suite la connexion en local :

A vous de la configurer.

Pour terminer, Visual Studio nous montre les objets présents sur notre serveur SQL. Je coche donc le ou les objets dont j’ai besoin.

Maintenant, nous allons gérer notre objet et créer la classe nous permettant d’exécuter notre procédure.

Cliquez sur « Explorateur de modèles » :

J’obtiens maintenant ceci dans le panneau de droite :

Double cliquer sur le menu « Importation de fonction » puis sur la procédure stockée :

Le panneau suivant s’ouvre au milieu :

CLiquez sur « Obtenir les informations de colonne » pour afficher la structure renvoyée par notre procédure.
Quelques explications :
Le type « scalaire » signifie que le système a détecté que votre procédure renvoyait un champ sur X lignes.
Le type « complexe » signifie que le système a détecté que votre procédure renvoyait plus champs sur X lignes.

Laissez les noms par défaut à savoir « PUtilisateurGet » et « PUtilisateurGet_result »

Retournez maintenant sur le projet « DAL » et ajoutez une classe en la nommant « Provider » ou, si vous avez plusieurs base de données, du nom de cette dernière.

Ajoutons une méthode qui ira accéder à notre procédure stockée. Le type de donnée retourné sera donc « List<DAL.PUtilisateurGet_Result> »

Important : Si vous avez dans votre projet une « BLL », vous devrez placer cette classe dans la BLL.

Le code est le suivant :

Maintenant, il faut ajouter une référence entre le projet « IHM » et « DAL ». (Ajouter une référence > projet > DAL)

Puis plaçons le code suivant dans le program.cs de notre projet « IHM » :

using System;
using System.Collections.Generic;

namespace IHM
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Début du chargement");

List<DAL.PUtilisateurGet_Result> _lst = new List<DAL.PUtilisateurGet_Result>();

foreach (var item in DAL.Provider.UtilisateurGet(2))
{
Console.WriteLine(string.Format("Nom : {0}", item.Nom));
}

Console.Read();
}
}
}

Appuyez sur F5. Une exception est levée : InvalidOperationException : Connexion Introuvable.

Pour corriger cela, nous devons ouvrir le fichier « App.Config » du projet « DAL » :
Repérer le code contenant la connection :

&lt;connectionStrings&gt;
&lt;add name="PortekoiTestEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=PORTEKOI-PC\PORTEKOI;initial catalog=PortekoiTest;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&amp;quot;" providerName="System.Data.EntityClient" /&gt;
&lt;/connectionStrings&gt;

Et placez le dans le fichier « App.Config » du projet « IHM ». Supprimer le fichier « App.Config » du projet « DAL » puis pressez F5.

Vous obtiendrez ceci :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *