Entity Framework Tutorial Procédure stockée
Quelle est la procédure stockée?
Une procédure stockée est un code SQL que vous pouvez enregistrer afin que le code puisse être réutilisé encore et encore.
- Si vous avez une requête SQL que vous écrivez maintes et maintes fois, enregistrez-la en tant que procédure stockée, puis appelez-la pour l'exécuter.
- Vous pouvez également transmettre des paramètres à une procédure stockée afin que celle-ci puisse agir en fonction de la ou des valeurs de paramètre transmises.
Procédure stockée dans Entity Framework
Entity Framework vous permet d'utiliser des procédures stockées dans le modèle de données d'entité.
- Vous pouvez utiliser des procédures stockées pour exécuter une logique prédéfinie sur des tables de base de données.
- Il peut également spécifier que EF doit utiliser vos procédures stockées pour l'insertion, la mise à jour ou la suppression d'entités.
Voici une procédure stockée simple, elle retournera tous les enregistrements de la table Authors lorsqu’elle sera exécutée.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetAllAuthors]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[GetAllAuthors] AS SELECT * FROM dbo.Authors ' END
Dans Entity Framework, vous pouvez exécuter des procédures stockées à l'aide de la méthode Database.SqlQuery
.
using (var context = new BookStore()) { var authors = context.Database .SqlQuery<Author>("EXECUTE dbo.GetAllAuthors") .ToList(); }
Paramètres de passage
Vous pouvez également transmettre des paramètres lors de l'exécution de procédures stockées. La procédure stockée suivante renverra un enregistrement de livre basé sur BookId
qui sera transmis en tant que paramètre.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetBookById]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[GetBookById] @BookId int AS SELECT * FROM dbo.Books WHERE BookId = @BookId ' END
Lorsqu'il sera exécuté, il renverra un enregistrement de livre spécifique à partir de la table Books en fonction de BookId = 2
transmis en tant que paramètre.
using (var context = new BookStore()) { var books = context.Database .SqlQuery<Book>("EXECUTE dbo.GetBookById 2") .ToList(); }