procédure stockée

publicité
Développement d’application
avec base de données
Semaine 3 : Modifications avec Entité Framework
Automne 2015
Plan de présentation
 Modifications à l’aide de l’Entité Framework
 Les procédures stockées
 Définition des comportements avec les procédures
stockées
Introduction
 Une fois la recherche effectuées, nous allons vouloir
altérer la valeur de l’enregistrement trouvé et la
sauvegarder dans la base de données.
 Entité Framework nous offres des méthodes qui vont
s’occuper de générer
automatiquement(context.SaveChanges();) les requêtes
qui altérerons les données dans la base de données.
Mais quoi sauvegarder?
 Pour chaque entrée d’une entité instancié, un objet de type
DbEntityEntry est créée.
 Cet objet contiendra entre autre
 l’état(State: Unchanged, Detached, Modified, Added, or Deleted)
 la valeur originale
 la nouvelle valeur.
Cet objet surveillera seulement les propriétés scalaires des
entités.
 Voir : context.ChangeTracker.Entries()
Mise à jour
 Par conséquent, l’entité Framework générera une
requête seulement pour les éléments qui nécessitent
une mise à jour.
 La méthode SaveChanges() génèrera la(les) requêtes
appropriés.
Sauvegarder un enregistrement
modifié
Code:
using (PEF context = new PEF())
{
var contact = context.Contacts.First();
contact.FirstName = "Julia";
contact.ModifiedDate = DateTime.Now;
context.SaveChanges();
}
Code généré lors du SaveChanges:
exec sp_executesql N'update [dbo].[Contact]
set [FirstName] = @0, [ModifiedDate] = @1
where ([ContactID] = @2)
',N'@0 nvarchar(50),@1 datetime2(7),@2 int',@0=N'Julia',
@1='2009-11-30 09:27:20.3335098',@2=1
Modifier plusieurs entités
Code:
var contacts = context.Contact.Include("Addresses")
.Where(c => c.FirstName == "Robert").ToList();
var contact = contacts[3];
contact.FirstName = "Bobby";
contact = contacts[5];
var address = contact.Addresses.ToList()[0];
address.Street1 = "One Main Street";
context.SaveChanges();
Code généré lors du SaveChanges:
exec sp_executesql N'update [dbo].[Address]
set [Street1] = @0
where ([addressID] = @1)
',N'@0 nvarchar(50),@1 int',@0=N'One Main Street',@1=2424
exec sp_executesql N'update [dbo].[Contact]
set [FirstName] = @0where ([ContactID] = @1)
',N'@0 nvarchar(50),@1 int',@0=N'Bobby',@1=298
Ajouter un enregistrement
var contact = context.Contacts.Where(c => c.FirstName =="Robert").First();
var address = new Address();
address.Street1 = "One Main Street";
address.City = "Burlington";
address.StateProvince = "VT";
address.AddressType = "Business";
address.ModifiedDate = DateTime.Now;
//join the new address to the contact
address.Contact = contact;
context.SaveChanges();
Ajouter des enregistrements avec
une relation parent enfant
PROGRAMMINGEFDB1Entities context = new PROGRAMMINGEFDB1Entities();
var contact = new Contact();
var address = new Address();
contact.FirstName = "Hugo";
contact.LastName = "St-Louis";
contact.Title = "Mr";
contact.ModifiedDate = DateTime.Now;
contact.AddDate = DateTime.Now;
address.Street1 = "One Main Street";
address.City = "Olympia";
address.StateProvince = "WA";
address.AddressType = "Business";
address.ModifiedDate = DateTime.Now;
//join the new address to the contact
address.Contact = contact;
//add the new graph to the context
context.Address.Add(address);
context.SaveChanges();
Supprimer un enregistrement
Contact c = context.Contact.First();
context.Contact.Remove(c);
context.SaveChanges();
Exercices
 Faite la première partie des exercices
Les procédure stockés
 Qu’est-ce qu’une procédure stocké?
 une procédure stockée (ou stored procedure en anglais)
est un ensemble d'instructions SQL pré-compilées,
stockées dans une base de données et exécutées sur
demande par le SGBD qui manipule la base de données.
Les procédure stockés
 Intérêts
 simplification : code plus simple à comprendre
 rapidité : moins d'informations sont échangées entre le
serveur et le client
 performance : économise au serveur l'interprétation de
la requête car elle est précompilée
 sécurité : les applications et les utilisateurs n'ont aucun
accès direct aux tables, mais passent par des procédures
stockées prédéfinies
Ajoutons les procédures stockés à
l’entité Data Modèle
Voir le fichier SSDL
 Les procédures stockés sont apparues(voir le fichier).
 Utiliser une procédure stockés
 Attention , fonction et procédure stockés sont souvent
utilisées comme synonymes
Lier les procédures stockés aux
comportement de l’entité
 Il faut aller sur le « mapping » de l’entité
Lier les procédures stockés aux
comportement de l’entité
Lier les procédures stockés aux
comportement de l’entité
 Il est possible de
définir la valeur de
retour.
 Par exemple,
lorsqu’on crée un
nouvel
enregistrement, il
peut être pratique
de connaître la clé.
 Autrement la clé ne
sera pas mise à
jour.
Exercice
 Faite la deuxième partie des exercices
Conclusion
 Modifications à l’aide de l’Entité Framework
 Les procédures stockées
 Définition des comportements avec les procédures
stockées
Questions?
Téléchargement