Utiliser des procédures stockées avec Entity Framework 4

Pour des raisons de sécurité et de performance, il peut être judicieux d’utiliser des procédures stockées pour interagir avec la base de données. Cet article a pour but de démontrer comment utiliser les procédures stockées avec le framework Entity 4.

Le but de l’article est de créer 4 procédures stockées pour ajouter, modifier et récupérer des blogs dans la base de données :

Insert(nvarchar(max) name, nvarchar(max) url)

Pour ajouter un blog dans la base de données. Elle retourne l’ID du blog qui vient dêtre ajouté.

CREATE PROCEDURE [dbo].[Insert]
(
@name nvarchar(max),
@url nvarchar(max)
)
AS

INSERT INTO [dbo].[Blogs]
(name, url)
VALUES
(@name, @url);

SELECT CONVERT(int, SCOPE_IDENTITY());
}

Note : Pour retourner l’ID généré lors de l'INSERT, il faut utiliser SELECTet non RETURN.

Update(int id, nvarchar(max) name, nvarchar(max) url)

Pour modifier un blog déjà présent dans la base de données. La procédure retourne le nombre de lignes modifiées.

CREATE PROCEDURE [dbo].[Update]
(
@id int,
@name nvarchar(max),
@url nvarchar(max)
)
AS

UPDATE [dbo].[Blogs] SET
name = @name,
url = @url
WHERE id = @id;

GetAll()

Récupère tous les blogs de la base de données. Elle retourne une liste d’objets de type Blog.

GetByID(int id)

Récupère le blog correspondant à l’ID passé en paramètre. La procédure renvoie un objet de type Blog.

CREATE PROCEDURE [dbo].[GetByID]
(
@id int
)
AS

SELECT * FROM [dbo].[Blogs]
WHERE id = @id;

La table Blogs est la suivante :

sql result

Pour commencer, il faut ajouter un fichier.edmxau projet afin de faire la liaison entre l’application et la base de données

edmx

La génération du fichier .edmx se fait automatiquement depuis la base de données.

generate datasource

Sélection de la table blog et des procédures stockées.

datasource

Il faut maintenant importer une par une les procédures stockées via le menu Model Browser.

import

Répéter l’opération pour les 4 procédures stockées en prêtant attention au type de retour :

  • Pour Insert, la procédure renvoie l’ID nouvellement créé, il faut donc retourner une collection d’objets de type scalaire Int32.

  • Pour Update, la procédure renvoie le nombre de lignes modifiées. Tout est géré par EF4, le type de retour est donc none.**

  • Pour GetAll, la procédure renvoie une collection d’objets de type Blog, il faut donc retourner une collection d’entités Blog.**

  • Pour GetByID, la procédure renvoie un object de type Blog, il faut donc retourner une collection d’entités Blog.**

Tout est maintenant en place pour interagir avec la base de données. Voici comment appeler les procédures stockées.

StoredProcedureEFArticleEntities ent = new StoredProcedureEFArticleEntities();

// Insert
int? idAymeric = ent.Insert("Aymeric's blog", "https://www.aymericlagier.com").FirstOrDefault();
int? idMSDN = ent.Insert("MSDN Fr", "http://msdn.microsoft.com/fr-fr/default.aspx").FirstOrDefault();
int? idJulienD = ent.Insert("Julien Dollon", "http://blogs.dotnet-france.com/juliend/").FirstOrDefault();

// Update
if (idMSDN.HasValue)
{
    ent.Update(idMSDN.Value, "MSDN US", "http://msdn.microsoft.com");
}

// GetByID
if (idAymeric.HasValue)
{
    Blog myBlog = ent.GetByID(idAymeric.Value).FirstOrDefault();
}

// GetAll
List<Blog> blogs = ent.GetAll().ToList();

Voir également