Vous êtes sur la page 1sur 3

Utiliser des procédures stockées

Certains développeurs et administrateurs de base de données préfèrent utiliser des procédures


stockées pour l’accès à la base de données. Dans les versions antérieures d’Entity Framework, vous
pouvez récupérer des données à l’aide d’une procédure stockée en exécutant une requête SQL brute
(https://learn.microsoft.com/fr-fr/aspnet/mvc/overview/getting-started/getting-started-with-ef-
using-mvc/advanced-entity-framework-scenarios-for-an-mvc-web-application), mais vous ne pouvez
pas demander à EF d’utiliser des procédures stockées pour les opérations de mise à jour. Dans EF 6, il
est facile de configurer Code First pour utiliser des procédures stockées.

1 Dans DAL\SchoolContext.cs, ajoutez le code mis en surbrillance à la OnModelCreating méthode.

C# Copier protected override void OnModelCreating(DbModelBuilder modelBuilder)

2{

3 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

4 modelBuilder.Entity<Course>()

5 .HasMany(c => c.Instructors).WithMany(i => i.Courses)

6 .Map(t => t.MapLeftKey("CourseID")

7 .MapRightKey("InstructorID")

8 .ToTable("CourseInstructor"));

9 modelBuilder.Entity<Department>().MapToStoredProcedures();

10 }

11 Ce code indique à Entity Framework d’utiliser des procédures stockées pour les opérations
d’insertion, de mise à jour et de suppression sur l’entité Department .

12 Dans la console De gestion du package, entrez la commande suivante : add-migration


DepartmentSP Ouvrez Migrations\<timestamp>_DepartmentSP.cs pour afficher le code dans la Up
méthode qui crée des procédures stockées Insert, Update et Delete : C# Copier public override void
Up()

13 {

14 CreateStoredProcedure(

15 "dbo.Department_Insert",

16 p => new

17 {

18 Name = p.String(maxLength: 50),

19 Budget = p.Decimal(precision: 19, scale: 4, storeType: "money"),

20 StartDate = p.DateTime(),

21 InstructorID = p.Int(),

22 },
23 body:

24 @"INSERT [dbo].[Department]([Name], [Budget], [StartDate], [InstructorID])

25 VALUES (@Name, @Budget, @StartDate, @InstructorID)

26

27 DECLARE @DepartmentID int

28 SELECT @DepartmentID = [DepartmentID]

29 FROM [dbo].[Department]

30 WHERE @@ROWCOUNT > 0 AND [DepartmentID] = scope_identity()

31

32 SELECT t0.[DepartmentID]

33 FROM [dbo].[Department] AS t0

34 WHERE @@ROWCOUNT > 0 AND t0.[DepartmentID] = @DepartmentID"

35 );

36

37 CreateStoredProcedure(

38 "dbo.Department_Update",

39 p => new

40 {

41 DepartmentID = p.Int(),

42 Name = p.String(maxLength: 50),

43 Budget = p.Decimal(precision: 19, scale: 4, storeType: "money"),

44 StartDate = p.DateTime(),

45 InstructorID = p.Int(),

46 },

47 body:

48 @"UPDATE [dbo].[Department]

49 SET [Name] = @Name, [Budget] = @Budget, [StartDate] = @StartDate, [InstructorID] =


@InstructorID

50 WHERE ([DepartmentID] = @DepartmentID)"

51 );

52
53 CreateStoredProcedure(

54 "dbo.Department_Delete",

55 p => new

56 {

57 DepartmentID = p.Int(),

58 },

59 body:

60 @"DELETE [dbo].[Department]

61 WHERE ([DepartmentID] = @DepartmentID)"

62 );

63 }

64

65 Dans la console De gestion du package, entrez la commande suivante : update-database

66 Exécutez l’application en mode débogage, cliquez sur l’onglet Services , puis sur Créer.

67 Entrez des données pour un nouveau service, puis cliquez sur Créer.

68 Dans Visual Studio, examinez les journaux dans la fenêtre Sortie pour voir qu’une procédure
stockée a été utilisée pour insérer la nouvelle ligne Department.

Le code First crée des noms de procédure stockée par défaut.

Si vous utilisez une base de données existante, vous devrez peut-être personnaliser les noms des
procédures stockées afin d’utiliser des procédures stockées déjà définies dans la base de données.
Pour plus d’informations sur la procédure à suivre, consultez La première insertion/mise à jour/mise
à jour/suppression des procédures stockées Entity Framework Code
(https://msdn.microsoft.com/data/dn468673).

Si vous souhaitez personnaliser ce que font les procédures stockées générées, vous pouvez modifier
le code généré pour la méthode de migration Up qui crée la procédure stockée. De cette façon, vos
modifications sont reflétées chaque fois que cette migration est exécutée et sont appliquées à votre
base de données de production lorsque les migrations s’exécutent automatiquement en production
après le déploiement.

Si vous souhaitez modifier une procédure stockée existante créée dans une migration précédente,
vous pouvez utiliser la commande Add-Migration pour générer une migration vide, puis écrire
manuellement du code qui appelle la méthode AlterStoredProcedure
(https://msdn.microsoft.com/library/system.data.entity.migrations.dbmigration.alterstoredprocedur
e.aspx) .

Vous aimerez peut-être aussi